JAVA IO流编程 实现文件的写入、写出以及拷贝
一、流的概念
流:数据在数据源(文件)和程序(内存)之间经历的路径。
输入流:数据从数据源(文件)到程序(内存)的路径。
输出流:数据从程序(内存)到数据源(文件)的路径。
以内存为参照,如果数据向内存流动,则是输入流,反之则是输出流

字节流:FileInputStream用来读取文件
FileOutputStream用来写入到文件
字符流:FileReader\BufferedReader用来读取文件
FileWrite\BufferedWrite用来写入到文件
二、操作用法
1.获取文件对象,针对该对象进行一些基本操作
//创建一个文件对象
File f = new File("F:\\test\\sheet.xls");
//得到文件的路径
System.out.println("文件路径"+f.getAbsolutePath());
//得到文件的大小,字节数
System.out.println("文件大小"+f.length());
//可读属性
System.out.println("可读"+f.canRead());
2.创建文件(判断该文件是否存在,若存在则弹出提示,若不存在则进行创建)
//创建文件
File f = new File("F:\\test\\test.txt");
//判断该文件是否存在
if(!f.exists())
{
//可以创建
try {
f.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
else
{
System.out.println("改文件已存在,创建失败!");
}
3.创建文件夹(条件同上)
//创建文件夹
File f = new File("F:\\test");
if (f.isDirectory())//判断是不是一个文件夹
{
System.out.println("创建失败");
} else {
f.mkdir();
}
Tips:这里写明一下isFile()、exists()和isDirectory()的区别
isFile():判断是否文件,也许可能是文件或者目录。
exists():判断是否存在,可能不存在。
isDirectory(): 判断该对象是否是一个文件夹。
4.列出某文件夹下面的所有文件(此时对象还是File,File没有文件和文件夹之分,对电脑来讲,文件夹只是一种特殊的文件)
File f = new File("F:\\testt");
if (f.isDirectory()) {
File filelists[] = f.listFiles();
for (int i = 0; i < filelists.length; i++)
{
System.out.println("文件名是:"+filelists[i].getName());
}
}
5.FileInputStream的使用
/**
* 演示FileInputStream类的使用
*/
package com.test2; import java.io.*; public class Demo11_2 {
public static void main(String[] args) { //得到一个文件对象
File f = new File("F:\\tt\\test.txt");
FileInputStream fis = null;
//因为file没用读写的能力,所以需要使用FileInputStream
try {
fis = new FileInputStream(f); //定义一个字节数组(相当于一个缓存,如果你的对象"f"是一个很大的文件,内存不够用,所以只能一点一点地读取)
byte[] bytes = new byte[1024];
//实际读取到的字节数
int n = 0;
//循环读取
//如果read()返回-1,则说明读取完毕
while ((n = fis.read(bytes)) != -1) {
//将字节转换成string
//此时实例化s时,要注意指定编码格式,电脑上文档默认的是GBK,而我这边默认的是utf-8,
//所以如果不指定格式的话,最后输出的中文会出现乱码
String s = new String(bytes, 0, n,"GBK");
System.out.println(s);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//关闭文件流(关键)
try {
if (fis != null) {
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
读取成功..
6.FileOutputStream的使用
/**
* 演示FileOutputStream的使用
*/
package com.test2; import java.io.*; public class Demo11_3 {
public static void main(String[] args) {
File f = new File("F:\\tt\\test.txt");
//字节输出流
FileOutputStream fos = null; try {
fos = new FileOutputStream(f); String s = "Westlife - Better man\r\n西城男孩 - 更完美的人"; fos.write(s.getBytes());
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (fos != null) {
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
} }
}

写入成功..
7.字节流的操作(通过写入写出来实现图片的拷贝,操作byte)
/**
* 图片拷贝
*/
package com.test2; import java.io.*; public class Demo11_4 {
public static void main(String[] args) {
//先把图片读入到内存,再写到某个文件
//因为是二进制文件,因此只能用字节流完成
File f = new File("F:\\tt\\Westlife.jpg");
//输入流
FileInputStream fis = null;
//输出流
FileOutputStream fos = null; try {
fis = new FileInputStream(f);
//或者省略上面实例化File,直接在这里fis = new FileInputStream("F:\tt\Westlife.jpg");也可以 fos = new FileOutputStream("D:\\练习\\Westlife.jpg");
byte[] bytes = new byte[1024];
int n = 0;//记录实际读取到的字节数
//循环读取
while ((n = fis.read(bytes)) != -1) {
//输出到指定文件
fos.write(bytes);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//关闭打开的文件流
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
} if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
8.字符流的操作(操作char)
/**
* 字符流操作
*/
package com.test2; import java.io.*; public class Demo11_5 {
public static void main(String[] args) {
//文件取出字符流对象(输入流)
FileReader fr = null;
//写入到文件(输出流)
FileWriter fw = null; //创建一个fr对象
try {
//创建输入对象
fr = new FileReader("F:\\tt\\test.txt");
//创建输出对象
fw = new FileWriter("D:\\练习\\test2.txt"); //读入到内存
int n = 0;//记录实际读取到的字符数
char c[] = new char[1024];
while ((n = fr.read(c)) != -1) {
//输入
// String s = new String(c,0,n);
// System.out.println(s);
//输出
//方法一:fw.write(c);
方法二://指定输出的起始位置
fw.write(c, 0, n);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//关闭文件流
if (fr != null) {
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
} if (fw != null) {
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} }
}
9.缓冲字符流(提高了效率,直接操作String)
/**
* 缓冲字符流操作
*/
package com.test2; import java.io.*; public class Demo11_6 {
public static void main(String[] args) {
BufferedReader br = null;
BufferedWriter bw = null; //先创建FileReader对象
FileReader fr = null; //创建FileWriter对象
FileWriter fw = null;
try {
fr = new FileReader("F:\\tt\\test.txt");
br = new BufferedReader(fr); fw = new FileWriter("D:\\练习\\test3.txt");
bw = new BufferedWriter(fw); //循环读取文件
String s = "";
while ((s = br.readLine()) != null) {
//读取到内存
//System.out.println(s); //输出到磁盘
bw.write(s+"\r\n");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//注:如果文件流不关闭的话会影响后续对该文件的操作,比如可能读不到该文件的数据
if (br != null) {
try {
{
br.close();
}
} catch (IOException e) {
e.printStackTrace();
}
} if (bw != null) {
try {
{
bw.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
JAVA IO流编程 实现文件的写入、写出以及拷贝的更多相关文章
- Java IO流中 File文件对象与Properties类(四)
File类 用来将文件或目录封装成对象 方便对文件或目录信息进行处理 File对象可以作为参数传递给流进行操作 File类常用方法 创建 booleancreateNewFile():创建新文件,如果 ...
- java Io流输出指定文件的内容
package com.hp.io; import java.io.*; public class BufferedReaderTest{ /** *@param 想想 */ public st ...
- java IO流实现删除文件夹以及文件夹中的内容
这篇主要是对IO文件流对文件常用处理中的删除文件夹,平时我们直接删除文件夹既可以删除里面的全部内容. 但是java在实现删除时,只能是文件才会被删除. 所以这里需要定义一个方法,来递归调用方法(递归调 ...
- Java IO流之普通文件流和随机读写流区别
普通文件流和随机读写流区别 普通文件流:http://blog.csdn.net/baidu_37107022/article/details/71056011 FileInputStream和Fil ...
- java io流 创建文件、写入数据、设置输出位置
java io流 创建文件 写入数据 改变system.out.print的输出位置 //创建文件 //写入数据 //改变system.out.print的输出位置 import java.io.*; ...
- Java:IO流与文件基础
Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...
- java io流(字节流)复制文件
java io流(字节流) 复制文件 //复制文件 //使用字节流 //复制文本文件用字符流,复制其它格式文件用字节流 import java.io.*; public class Index{ pu ...
- 文件传输基础——Java IO流
一.文件的编码 package com.study.io; /** * 测试文件编码 */ public class EncodeDemo { /** * @param args * @throws ...
- 【Android】数据存储-java IO流文件存储
1.数据持久化:将在内存中的瞬时数据保存在存储设备中.瞬时数据:设备关机数据丢失.持久化技术提供一种机制可以让数据在瞬时状态和持久状态之间转换. 2.Android中简单的三种存储方式:文件存储.Sh ...
随机推荐
- 大白话5分钟带你走进人工智能-第三节最大似然推导mse损失函数(深度解析最小二乘来源)(1)
第三节最大似然推导mse损失函数(深度解析最小二乘来源) 在第二节中,我们介绍了高斯分布的 ...
- 《Thinking in Android 9.0 系统开发源码钻研录》
最近打算把个人站点的博客文章同步到"博客园"! Thinking in Android -- "系统启动" [启动阶段] [相关文章] 状态 源码版本 init ...
- frida的用法--Hook Java代码篇
frida是一款方便并且易用的跨平台Hook工具,使用它不仅可以Hook Java写的应用程序,而且还可以Hook原生的应用程序. 1. 准备 frida分客户端环境和服务端环境.在客户端我们可以编写 ...
- Cesium 实现粒子效果贴地(伪)
有时我们面对这样的需求,需要在地面上放一个周期性放大缩小的标记,可以使用粒子效果实现,但是粒子效果图片很难贴地(如果你知道怎么做,欢迎分享,期待有人打我脸),我只能变通实现一个看似贴地但实际没有贴地的 ...
- 联发科Helio P90(mt6779),P70(mt6775),P60(MT6771),P35,P22(MT6762)芯片参数规格
Helio P90(mt6779)是一款人工智能处理平台,集成了超级强大的AI专核APU 2.0,具有超强的AI性能和一系列基于人工智能的成像升级.该芯片将重新定义消费者对智能手机AI功能的体验.He ...
- WPF软件开发系统之三——自助购票取票、自助选座系统
本系统使用.Net WPF开发,运行于Windows操作系统,电脑或者触摸屏设备(包括竖屏). 本系统开发背景:景点.影院.或商场的自助购票.取票系统. 图书馆.自习室的选座.占座系统. 功能包括:选 ...
- Exp4恶意代码分析 20164312 马孝涛
1.实践目标 1.1是监控你自己系统的运行状态,看有没有可疑的程序在运行. 1.2是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysinternals,sy ...
- Linux 桌面玩家指南:08. 使用 GCC 和 GNU Binutils 编写能在 x86 实模式运行的 16 位代码
特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...
- Android 开发学习资源汇总
下面这些资源对Android开发来说是很有帮助的! 1. 在线代码运行工具 地址:https://tool.lu/coderunner/ 说明:此工具站能在线运行C.C++.Java,基本能满足相关基 ...
- Google File System 见解 (作业)
Google File System ——见解 近年来,大街小巷都传遍的大数据,引起了社会的一阵学习大数据狂热,造成任何公司在招聘人员的时候都会注上一条,会大数据的优先考虑:但是,从另一方面来说,这狂 ...
