1.输入输出流的结构
2.标准的输入输出流
int b;
try {
while ((b = System.in.read()) != -1) {
System.out.print((char) b);
}
} catch (IOException e) {
System.out.println(e.getMessage());
}
3.选择字符流还是字节流
- 当要读入的是纯文本文件时,选择字符流,FileReader、FileWriter
FileReader fileReader = null;
try {
fileReader = new FileReader("src/demo1.txt");
char [] ch = new char[1024];
int len = 0;
while((len =(fileReader.read(ch))) != -1){
System.out.print(new String(ch,0,len));
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
fileReader.close();
}
- 字节流可以读取任何类型的文件
System.out.println("*********************文件的复制***********");
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream("src/demo1.txt");
fos = new FileOutputStream("src/output.txt");
int len = 0;
while((len =fis.read()) != -1){
fos.write(len);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
fos.close();
fis.close();
}
缓冲区的使用
使用缓冲区可以提高文件读取的效率。读取文件的效率从高到低,缓存 >
内存> 硬盘。所以要追求速率的时候,使用缓冲区。
System.out.println("********************BufferReader BufferWriter***********");
BufferedReader bufferedReader = new BufferedReader(new FileReader("src/demo1.txt"));
BufferedWriter bufferedWriter = null;
bufferedWriter = new BufferedWriter(new FileWriter("src/write.txt"));
String line = null;
while((line = bufferedReader.readLine()) != null){
bufferedWriter.write(line, 0, line.length());;
}
bufferedWriter.close();
bufferedReader.close();
需要注意的点
1.int read() 返回值是int,一次读取一个字符,当读到文件的最后返回-1
2.readLine()返回值是String ,读取一行字符,读到文件末尾时返回null
3.Reader 和 Writer进行read()和write()方法的类型不一样
char [] ch = new char[1024];
int len = 0;
len = fileReader.read(ch);
byte [] ch = new byte[512];
count = System.in.read(ch);
fos.write(ch,0,count);