OutputStream
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class Main {
public static void main(String[] args) throws Exception {
File file = new File("/Users/yuzhen/File/test.txt");
OutputStream outputStream = new FileOutputStream(file,true); // 不覆盖文件内容
String str = "好好学习天天向上\r\n";
byte data [] = str.getBytes();
outputStream.write(data);
outputStream.close();
}
}
InputStream
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
File file = new File("/Users/yuzhen/File/test.txt");
InputStream inputStream = new FileInputStream(file);
byte data [] = new byte [1024];
int len = inputStream.read(data);
inputStream.close();
System.out.println(new String(data,0,len));
}
}
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
File file = new File("/Users/yuzhen/File/test.txt");
InputStream inputStream = new FileInputStream(file);
byte data [] = new byte [1024];
int foot = 0;
int temp = 0;
while ((temp = inputStream.read()) != -1){
data[foot ++] = (byte) temp; // 单个字节数据读取
}
inputStream.close();
System.out.println(new String(data,0,foot));
}
}
Writer
Writer 作为字符输出流,可以直接输出字符串,比 OutputStream 要好很多。
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
File file = new File("/Users/yuzhen/File/test.txt");
Writer writer = new FileWriter(file,true);
String str = "立志当一名优秀的程序员!\r\n";
writer.write(str);
writer.close();
}
}
Reader
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
File file = new File("/Users/yuzhen/File/test.txt");
if(file.exists()){
Reader reader = new FileReader(file);
char data [] = new char[1024];
int len = reader.read(data);
reader.close();
System.out.println(new String(data,0,len));
}
}
}
比较字节流与字符流
字节流直接与终端进行数据交流,而字符流需要将数据经过缓冲区处理。
使用字节流输出的时候,即使没有关闭输出流,内容也可以正常输出。但是如果使用字符流输出时,如果没有关闭输出流,就表示缓冲区中处理的内容不会被强制清空,内容无法输出。这个时候可以使用 flush 方法强制清空缓冲区。
中文处理的时候采用字符流会更好。
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
File file = new File("/Users/yuzhen/File/test.txt");
Writer writer = new FileWriter(file,true);
String str = "立志当一名优秀的程序员!\r\n";
writer.write(str);
writer.flush();
}
}
字节流与字符流的转换
如果要进行转换,唯一可能出现的形式就是处理中文。
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
File file = new File("/Users/yuzhen/File/test.txt");
OutputStream outputStream = new FileOutputStream(file,true); // 不覆盖文件内容
Writer writer = new OutputStreamWriter(outputStream);
String str = "好好学习天天向上\r\n";
writer.write(str);
writer.close();
}
}
文件拷贝
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
File fileA = new File("/Users/yuzhen/File/testA.txt");
File fileB = new File("/Users/yuzhen/File/testB.txt");
if(!fileB.exists()){
fileB.createNewFile();
}
InputStream inputStream = new FileInputStream(fileA);
OutputStream outputStream = new FileOutputStream(fileB);
byte data [] = new byte[1024];
int temp = 0;
while((temp = inputStream.read(data)) != -1){
outputStream.write(data,0,temp);
}
inputStream.close();
outputStream.close();
}
}