• 字符流有两个抽象类:Writer   Reader。其对应子类FileWriter,FileReader可实现文件的读写操作
  • 同样,字节流也有两个抽象类:InputStream OutputStream。其对应子类有FileInputStream,FileOutputStream可实现文件读写
  • IO流中的重要方法:read()方法返回-1,readLine方法返回null。用法列如:while((line=br.readLine())!=null)。Scanne类中的hasNext()方法如果此扫描器的输入中有另一个标记,则返回 true。hasNextLine()方法如果在此扫描器的输入中存在另一行,则返回 true。next() 方法查找并返回来自此扫描器的下一个完整标记,nextLine() 此扫描器执行当前行,并返回跳过的输入信息。
  • 在I/O流中可以创建文件对象,并且带入文件名的类,常见的有以下7种:

 

File file=new File("word.txt");
  FileInputStream fis=new FileInputStream("word.txt");
  FileOutputStream fos=new FileOutputStream("word.txt");
  FileReader (String filename);
  FileWriter (String filename);
  PrintStream (String filename);
  PrintWriter (String filename);
  • 文件File是java.io包中的一个重要的非流类。File以一种系统无关的方式表示一个文件对象的属性。
  • File类用于创建目录的方法是mkdir(),用于创建父目录的方法是mkdirs().

InputStream,BufferedInputStream

read()
public abstract int read() throws IOException

从输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1。在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞。

返回:

下一个数据字节;如果到达流的末尾,则返回 -1。

close() 

关闭此输入流并释放与该流关联的所有系统资源。

OutputStream,BufferedOutputStream
write()
public void write(int b) throws IOException

将指定的字节写入此缓冲的输出流。

参数:

b - 要写入的字节。

close() 

关闭此输出流并释放与此流有关的所有系统资源。

BufferedReader
read()
public int read() throws IOException

读取单个字符

返回:

作为一个整数(其范围从 0 到 65535 (0x00-0xffff))读入的字符,如果已到达流末尾,则返回 -1

readLine
public String readLine() throws IOException

读取一个文本行。通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行。

返回:

包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null

close() 

关闭该流并释放与之关联的所有资源。

Reader,InputStreamReader
read()
public int read() throws IOException

将字符读入数组。在某个输入可用、发生 I/O 错误或者已到达流的末尾前,此方法一直阻塞

返回:

读取的字符,如果已到达流的末尾,则返回 -1

close()

关闭该流并释放与之关联的所有资源。

BufferedWriter
write(int c)

写入单个字符。

newLine()
public void newLine() throws IOException

写入一个行分隔符。行分隔符字符串由系统属性 line.separator 定义,并且不一定是单个新行 ('\n') 符。

返回:

包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null

close() 

关闭此流,但要先刷新它。

Writer,OutputStreamWriter
write()
public void write(int c) throws IOException

写入单个字符。要写入的字符包含在给定整数值的 16 个低位中,16 高位被忽略。

用于支持高效单字符输出的子类应重写此方法。

参数:

c - 指定要写入字符的 int。

close() 

关闭此流,但要先刷新它。

 

例题:复制文件:把文件a.txt从D盘复制到E盘,操作方法如下。

  • 方法一:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
 
public class Q2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader("D:\\a.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("E:\\a.txt"));
String line = null;
while((line=br.readLine())!=null){
bw.write(line);
bw.newLine();
}
bw.close();
}
}
  • 方法二
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;
 
public class test4 {
public static void main(String[] args) throws IOException {
File file = new File("C://a.txt");
Scanner sc=new Scanner(file);
PrintWriter pw=new PrintWriter("D://a.txt");
while(sc.hasNextLine()){
String str=sc.nextLine();
pw.println(str);
}
pw.close();
}
}