首先是File对象的创建:
package JavaCore;
import java.io.File;
public class TestFile {
public static void main(String[] args) {
//1、File(String directoryPath);
File f1=new File("D:/TestFile/a.txt");
//2、File(String directoryPath, String filename);
File f2=new File("D:/TestFile","a.txt");
//3、File(File dirObj, String filename);
File file=new File("D:/TestFile");
File f3=new File(file,"a.txt");
}
}
Java I/O的结构图:
字节流与字符流之间的区别:
1.读写单位不同:字节流式以字节(8位2进制)为单位,字符流是以字符为单位,根据码表映射字符,一次可能读多个字节。
2.处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。
3.字节流:一次读入或读出是8位二进制。
4.字符流:一次读入或读出是16位二进制。
输入输出流:
输入流:InputStream、Reader
输出流:OutputStream、Writer
节点流:
- 父 类 :InputStream 、OutputStream、 Reader、 Writer
- 文 件 :FileInputStream 、 FileOutputStrean 、FileReader 、FileWriter 文件进行处理的节点流
- 数 组 :ByteArrayInputStream、 ByteArrayOutputStream、 CharArrayReader 、CharArrayWriter 对数组进行处理的节点流(对应的不再是文件,而是内存中的一个数组)
- 字符串 :StringReader、 StringWriter 对字符串进行处理的节点流
- 管 道 :PipedInputStream 、PipedOutputStream 、PipedReader 、PipedWriter 对管道进行处理的节点流
测试:
I
package JavaCore;
import java.io.*;
public class TestFile {
public static void main(String[] args) throws IOException {
//为了代码层次清晰把所有异常全部抛出去
File file=new File("D:/TestFile/a.txt");
//测试FileInputStream及FileReader
InputStream inputStream=new FileInputStream(file);
byte[] buffer=new byte[1024];
int len=1;
while ((len=inputStream.read(buffer))!=-1){
String str=new String(buffer,0,len);
System.out.println(str);
}
inputStream.close();
//你爱我,
//我爱你,
//蜜雪冰城甜蜜蜜。
Reader reader=new FileReader(file);
char[] chars=new char[1024];
while ((len=reader.read(chars))!=-1){
System.out.println(chars);
}
//你爱我,
//我爱你,
//蜜雪冰城甜蜜蜜。
reader.close();
}
}
package JavaCore;
import java.io.*;
public class TestFile {
public static void main(String[] args) throws IOException {
//为了代码层次清晰把所有异常全部抛出去
File file=new File("D:/TestFile/a.txt");
//测试OutInputStream及FileWriter
OutputStream outputStream=new FileOutputStream(file);
byte[] bytes=(" 望岳\n" +
"作者:杜甫\n" +
"岱宗夫如何?齐鲁青未了。\n" +
"造化钟神秀,阴阳割昏晓。\n" +
"荡胸生曾云,决眦入归鸟。\n" +
"会当凌绝顶,一览众山小。").getBytes();
outputStream.write(bytes);
outputStream.close();
Writer writer=new FileWriter(file);
String str=" 卜算子·咏梅\n作者:毛泽东\n风雨送春归,飞雪迎春到。\n已是悬崖百丈冰,犹有花枝俏。\n俏也不争春,只把春来报。\n待到山花烂漫时,她在丛中笑。";
writer.write(str);
writer.close();
}
}
常用的处理流:
- 缓冲流:BufferedInputStrean 、BufferedOutputStream、 BufferedReader、 BufferedWriter 增加缓冲功能,避免频繁读写硬盘。
- 转换流:InputStreamReader 、OutputStreamReader实现字节流和字符流之间的转换。
- 数据流: DataInputStream 、DataOutputStream 等-提供将基础数据类型写入到文件中,或者读取出来。
处理流和节点流使用方法基本雷同这里不再赘述.
面试题:https://blog.csdn.net/weixin_42363141/article/details/114034877