本文视频网址:【Java语言进阶】3小时学会io流的使用方法
1 File
文件类File,可以表示目录,也可以表示文件。
File file = new File(Path path)
path可以是一个文件夹的路径,也可以是一个文件的路径。
- 绝对路径
file.getAbsolutePath() - 相对路径
file.getPath()
在工程项目中,项目中某个文件所在的目录,可以用相对路径表示。这样打包发送给其他人后,仍可以正常使用。
2 流
2.1 字节流、字符流
-
字节流
系统中的文件(图片、视频等)都是以二进制进行存储,所以最小数据单元就是字节(8个二进制字符),这也意味着系统中的所有文件都可以用字节流进行处理。即字节流读数据时,一次读8位。 -
字符流
有字节流了,为什么还要使用字符流呢?因为每个国家的字符不同,这涉及到了字符编码问题。比如汉字,获取到汉字字节数据的同时,指定编码表才可以解析正确的数据。只要操作字符数据,优先考虑字符流体系。
2.2 字节流的实现
接口:inputStream,OutputStream。
这两个接口中定义了读写文件的方法。
**输入:**实现InputStream的类有许多,90%的情况下会使用FileInputStream。
InputStream ins = new FileInputStream("H:\\word.txt");
int data1 = ins.read();//一次读入一个字节,即8位二进制字符
int data2 = ins.read();
System.out.println((char)data1);
System.out.println((char)data2);
byte[] buff = new byte[2048];//以一个字节为单位读,最长读入2048个字节
int length = ins.read(buff);
System.out.println(length);
for (byte b : buff) {
System.out.print((char)(int)b);
}
**输出:**实现InputStream的类有许多,90%的情况下会使用FileInputStream。
OutputStream os = new FileOutputStream("H:\\outdata.txt");
os.write(97);
2.3 字符流的实现
FileWriter writer = new FileWriter(new File("H:\\word.txt"));
writer.write("I love you.我爱你。");
writer.close();
FileReader reader = new FileReader(new File("H:\\word.txt"));
//System.out.println((char)reader.read());
char[] buf = new char[50];
reader.read(buf);
for (char c : buf) {
System.out.print(c);
}
如何选择字节流与字符流?
只有文本文件可以用字符流,而非文本文件只能使用字节流。