IO流
File
文件或者目录的抽象表现形式
只能操作文件外部的内容,无法操作文件内部内容的读写
File仅表示一个联系,可能文件存在,也可能不存在,可以是文件,也可以是文件夹
File常用方法
File file = new File("D://test.txt");
1、标记此抽象路径名指定的文件或目录,以便仅允许读取操作。
file.setReadOnly()
2、测试应用程序是否可以修改此抽象路径名表示的文件。
file.canWrite()
3、当且仅当具有此名称的文件尚不存在时,以原子方式创建由此抽象路径名命名的新空文件。
注意: 不能创建文件夹,只能创建文件
file.createNewFile()
4、删除此抽象路径名表示的文件或目录。
file.delete()
5、测试此抽象路径名与给定对象的相等性。
file.equals(file1)
6、测试此抽象路径名表示的文件或目录是否存在。
file.createNewFile()
7、返回此抽象路径名的绝对形式。
返回此抽象路径名的绝对路径名字符串。 相对路径:默认相对于项目
file.getAbsolutePath()
file.getAbsoluteFile()
8、通过此抽象路径名返回分区名中未分配的字节数。
file.getFreeSpace()
9、通过此抽象路径名返回分区名的大小。
file.getTotalSpace()
10、返回此抽象路径名表示的文件或目录的名称。
file.getName()
11、返回此抽象路径名父项的路径名字符串,如果此路径名未指定父目录,则返回 null 。
返回此抽象路径名父项的抽象路径名,如果此路径名未指定父目录,则返回 null 。
file.getParent()
file.getParentFile()
12、测试此抽象路径名是否为绝对路径。
测试此抽象路径名表示的文件是否为目录。
测试此抽象路径名表示的文件是否为普通文件。
测试此抽象路径名指定的文件是否为隐藏文件。
file.isAbsolute()
file.isDirectory()
file.isFile()
filr.isHidden()
13、返回上次修改此抽象路径名表示的文件的时间。
file.lastModified()
14、返回此抽象路径名表示的文件的长度。
file.length()
15、返回一个抽象路径名数组,表示此抽象路径名表示的目录中的文件。
file.listFiles()
16、返回一个字符串数组,用于命名此抽象路径名表示的目录中的文件和目录。
file.list()
17、创建此抽象路径名指定的目录。
创建此抽象路径名指定的目录,包括任何必需但不存在的父目录。
file.mkdir()
file.mkdirs()
18、重命名此抽象路径名表示的文件。
file.renameTo(new File(""))
流(Stream)
数据以先入先出的顺序进行传输,流就是管道,就是用来传输数据的
数据源:数据从数据源写出
目的地:从目的地中把数据读出来
数据源 ——> 数据 ——> 目的地
IO流
输入输出流
分类
1、流向分:以程序为中心
输入流 :从节点到java内存
输出流 :从java内存到节点
2、操作单位分:
字节流 :万能流—>管道中的数据以字节为单位
**字符流 **:以字符为单位
3、功能分:
节点流 :能够实现读写能力的
功能流 :增强节点功能与性能的流
字节流 | 节点流
字节输入流:InputStream -> 输入字节流的父类 -> 抽象父类 -> 不能实例化
文件字节输入流 FileInputStream -> 具体的类 -> 可以实例化
字节输出流 OutputStream -> 抽象父类 -> 不能实例化
文件字节输出流 FileOutputStream -> 具体子类 -> 可以实例化
注意:
写出内容默认覆盖源文件内容
目标文件不存在系统会默认构建
目标文件所在的路径不存在,系统就不会创建
操作步骤
1、创建输入输出流
输入流:
FileInputStream(String name) //name为数据源文件的路径字符串 FileInputStream(String file) //file为目的地路径file对象 FileInputStream(String name, boolean append) //参数append是否追加数据,默认不追加覆盖,true->追加
InputStream is = new FileInputStream("D://test.txt",true);
输出流:
FileOutputStream(String name) //name为数据源文件的路径 FileOutputStream(String file) //file为目的地路径file对象 FileOutputStream(String name, boolean append) //参数append是否追加数据,默认不追加覆盖,true->追加
OutputStream os = new FileOutputStream("D://test.txt",true);
2、读入写出数据
读入:已经到达文件末尾没有读到数据时返回 -1
int read() //从此输入流中读取一个字节的数据。
写出:
void write(int b) 将指定的字节写入此文件输出流。
3、刷出(输出时使用)
os.flush();
4、关闭流(释放内存)
is.close(); //或 os.close();
注意:
读入时可以每次读入一组数据(字节数组),重复读入:
int read(byte[] b)
会出现FileNotFoundException和IOException异常,可以使用try…catch捕获
通过字节流流进行文件拷贝
文件拷贝流程:
1源文件
2输入流
3程序(中转站)
4输出流
5目的地新文件注意:关闭流时后打开的先关闭
public class ByteCopyFile {
public static void main(String[] args) {
//1.定义输入输出流
InputStream is = null;
OutputStream os = null;
//捕获异常
try {
is = new FileInputStream("D://test1.txt");
os = new FileOutputStream("D://test2.txt");
//2.读入写出
//准备字符数组(长度建议1024整数倍)
byte[] b = new byte[1024];
int len = -1;
//循环打印
while ((len=is.read(b)) != -1){
os.write(b,0,len);
}
//3.刷出
os.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
//4.关闭
if (os!=null){
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (is!=null){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
字符流 | 节点流
字符输入流 Reader
文件字符输入流 FileReader
字符输出流 Writer
文件字符输出流 FileWriter
注意:
子类无新增方法需要使用,可以多态指向
读入数据的时候如果出现乱码问题,注意字符编码格式统一
文件:
字节流 -> 万能流
字符流 -> 纯文本文件
1、创建输入输出流
输入流:
Reader rd = new FileReader("D://test.txt");
输出流:
Writer wt = new FileWriter("D://test.txt");
2、读入写出
读入:
(char)(rd.read()); //每次读入一个字符数据 rd.read(char[] cbuf) //将字符读入数组。
写出:
String msg = "Hello IOStream!!!"; wt.write(msg);
3、刷出
wt.flush();
4、关闭
rd.close();
//或
wt.close();
通过字符流实现文件拷贝
public class CharCopyFile {
public static void main(String[] args) {
//1.构建流
Reader rd = null;
Writer rt = null;
try {
rd = new FileReader("D://haha.txt");
rt = new FileWriter("D://haha2.txt");
//2.拷贝
char[] car = new char[1024];
int len = -1;
while((len = rd.read(car))!=-1){
rt.write(car,0,len);
}
//3.刷出
rt.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
//4.关闭
if(rt!=null){
try {
rt.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(rd!=null){
try {
rd.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
if(rt!=null){
try {
rt.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(rd!=null){
try {
rd.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}