文章目录
- 字节流与字符流操作文件的读写的方式
- 字节流操作文件的读取和写入:
- 字符流操作文件的读取和写入:
- 缓冲流操作文件的读取和写入
- BufferedOutputStream与BufferedInputStream组合写入与读取
- BufferedWriter与BufferedReader组合写入与读取
字节流与字符流操作文件的读写的方式
- 字节流文件操作: 主要用于读取图片,MP3,AVI视频等文件。
- 字符流文件操作: 主要用于读取处理纯文本数据。
- 缓冲流操作文件的读取和写入
- 使用nio读写文件
字节流操作文件的读取和写入:
字节流文件操作: 主要用于读取图片,MP3,AVI视频等文件。
使用InputStream与OutputStream的子类实现为:FileInputStream与FileOutputStream。
字节流向文件中写入数据(字节流FileOutputStream )
public static void testFileOutputStream() {
try (FileOutputStream fileOutputStream = new FileOutputStream("E:\\document\\io\\d.txt");
){
String str = "FileOutputStream测试数据";
fileOutputStream.write(str.getBytes());
String str2 = "\r\n";
fileOutputStream.write(str2.getBytes());
String str3 = "FileOutputStream测试再次添加数据";
fileOutputStream.write(str3.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
字节流从文件的读取(字节流FileInputStream)
// read()
public static void testFileInputStream() {
try (FileInputStream fileOutputStream = new FileInputStream("E:\\document\\io\\d.txt");// 内容:FileOutputStream测试数据\r\nFileOutputStream测试再次添加数据
){
// read()
int read1 = fileOutputStream.read();
System.out.println((char) read1);
int read2 = fileOutputStream.read();
System.out.println((char) read2);
} catch (IOException e) {
e.printStackTrace();
}
}
// read(byte b[]) new String(arr)
public static void testFileInputStreamReadArr() {
try (FileInputStream fileOutputStream = new FileInputStream("E:\\document\\io\\d.txt");// 内容:FileOutputStream测试数据\r\nFileOutputStream测试再次添加数据
){
// read(byte b[])
byte[] arr = new byte[2048];
while ((fileOutputStream.read(arr)) != -1) {
System.out.println(new String(arr));
}
} catch (IOException e) {
e.printStackTrace();
}
}
// read(byte b[]) new String(arr,0,len)
public static void testFileInputStreamReadArrLength() {
try (FileInputStream fileOutputStream = new FileInputStream("E:\\document\\io\\d.txt");// 内容:FileOutputStream测试数据\r\nFileOutputStream测试再次添加数据
){
// read(byte b[])
byte[] arr = new byte[2048];
int len ;
while (( len = fileOutputStream.read(arr)) != -1) {
System.out.println(new String(arr,0,len));
}
} catch (IOException e) {
e.printStackTrace();
}
}
打印结果:
结论:使用// read(byte b[]) new String(arr,0,len)
字符流操作文件的读取和写入:
字符流文件操作: 主要用于读取处理纯文本数据。
使用Reader与Writer的子类实现为:FileReader与FileWriter
字符流向文件中写入数据(字符流FileWriter )
public static void testFileWriter() {
try (FileWriter fileWriter = new FileWriter("E:\\document\\io\\e.txt");
){
String str = "FileWriter测试数据";
fileWriter.write(str);
String str2 = "\r\n";
fileWriter.write(str2);
String str3 = "FileWriter测试再次添加数据";
fileWriter.write(str3);
} catch (IOException e) {
e.printStackTrace();
}
}
字符流从文件的读取(字符流FileReader)
// read()
public static void testFileReader() {
try (FileReader fileReader = new FileReader("E:\\document\\io\\e.txt");// 内容:FileWriter测试数据\r\nFileWriter测试再次添加数据
){
// read()
int read1 = fileReader.read();
System.out.println((char) read1);//F
int read2 = fileReader.read();
System.out.println((char) read2);//i
} catch (IOException e) {
e.printStackTrace();
}
}
// read(char cbuf[]) new String(arr)
public static void testFileReaderArr() {
try (FileReader fileReader = new FileReader("E:\\document\\io\\e.txt");// 内容:FileWriter测试数据\r\nFileWriter测试再次添加数据
){
// read(byte b[])
char[] arr = new char[2048];
while ((fileReader.read(arr)) != -1) {
System.out.println(new String(arr));
}
} catch (IOException e) {
e.printStackTrace();
}
}
// read(char cbuf[]) new String(arr,0,len)
public static void testFileReaderArrLength() {
try (FileReader fileReader = new FileReader("E:\\document\\io\\e.txt");// 内容:FileWriter测试数据\r\nFileWriter测试再次添加数据
){
// read(byte b[])
char[] arr = new char[2048];
int len ;
while (( len = fileReader.read(arr)) != -1) {
System.out.println(new String(arr,0,len));
}
} catch (IOException e) {
e.printStackTrace();
}
}
打印结果:
结论:使用// read(char cbuf[]) new String(arr,0,len)
缓冲流操作文件的读取和写入
BufferedOutputStream与BufferedInputStream组合写入与读取
步骤:
- FileOutputStream对象;
- new BufferedOutputStream(FileOutputStream对象)
BufferedOutputStream向文件中写数据
public static void testBufferedOutputStream() {
try (FileOutputStream fw = new FileOutputStream("E:\\document\\io\\h.txt");
BufferedOutputStream bis = new BufferedOutputStream(fw);
){
bis.write("testByBufferedOutputStream测试文本".getBytes());
bis.write("\r\n".getBytes());
bis.write("testByBufferedOutputStream测试文本再添加".getBytes());
bis.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
BufferedInputStream从文件中读取数据。
步骤:
- FileInputStream 对象;
- new BufferedInputStream(FileInputStream 对象)
public static void testBufferedInputStream() {
try (FileInputStream fis = new FileInputStream("E:\\document\\io\\h.txt");
BufferedInputStream bis = new BufferedInputStream(fis)
) {
int len ;
byte[] arr = new byte[1024];
while ((len = bis.read(arr)) != -1) {
System.out.println(new String(arr, 0, len));
}
} catch (IOException e) {
e.printStackTrace();
}
}
BufferedWriter与BufferedReader组合写入与读取
BufferedWriter向文件中写数据
步骤:
- FileWriter 对象;
- new BufferedWriter(FileWriter 对象)
public static void testByBufferedWriter() {
try (FileWriter fw = new FileWriter("E:\\document\\io\\f.txt", true);
BufferedWriter bw = new BufferedWriter(fw);
){
bw.write("testByBufferedReader测试文本");
bw.write("\r\n");
bw.write("testByBufferedReader测试文本再添加");
bw.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
BufferedReader从文件中读取数据。
步骤:
- FileReader 对象;
- new BufferedReader(FileReader 对象)
public static void testByBufferedReader() {
try (FileReader fileReader = new FileReader("E:\\document\\io\\f.txt");
BufferedReader bufferedReader = new BufferedReader(fileReader)
) {
String read;
while ((read = bufferedReader.readLine()) != null) {
System.out.println(read);
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
注:小文件推荐使用缓存输入输出流操作文件内容。大文件推荐使用NIO操作文件内容