Java中对文件的读取是以为流为单位的,对不同的设备在读取写入操作上是一样,不必关心具体的设备细节,实现跨平台。
所以一般来说,对文件名的读取写入,建议使用相对路径。
文件目录管理
使用java.io.File类对文件进行操作,操作的对象可以是文件,也可以是目录。
1 | File file = new File("Data.txt"); |
创建了File对象,表示当前目录下的文件Data.txt.
常用方法
1 | public boolean canRead(); |
一般来说,这个就是文件和目录的打开
文件字节流
主要有两个类 InputStream 和 OutputStream,分别控制了字节流的输入和输出
字节输入流
所有表示字节流的类都派生自抽象类java.io.InputStream。包括
java.io.FileInputStream 表示文件字节输入流
java.io.ByteArrayInputStream 表示 字节数组输入流,可从指定内存缓冲区中读取字节
java.io.FilterInputStream 用于过滤字节输入流
部分方法如下
1 | public abstract int read() throws IOException; |
字节输出流
所有表示字节流的类都派生自抽象类java.io.OutputStream。包括
java.io.FileOutputStream 表示文件字节输出流
java.io.ByteArrayOutputStream 表示 字节数组输出流,可从指定内存缓冲区中写入字节
java.io.FilterOutputStream用于过滤字节输出流
部分方法如下
1 | public abstract int write() throws IOException; |
类FilterInputStream和FilterOutputStream
以指定数据类型为单位,需要使用类FilterInputStream(过滤输入流)和FilterOutputStream(过滤输出流).
两者分别延生出
DataInputStream
BufferedInputStream
DataOutputStream 输出的格式是二进制文件
BufferedOutputStream
PrintStream 格式化输出各种数据值,输出数据可以以文本方式阅读
文件字符流
InputStream 和 OutputStream 只支持8位字符流,不能使用16位的Unicode字符。
添加支持字符流的 java.io.Reader 和 java.io.Writer.
其中得子类和方法大概与对应得InputStream 和 OutputStream 对应
文件随机访问
之前的文件都是只能顺序读访问,使用java中的 java.io.RamdomAccessFile类可以进行访问
两个构造方法
1 | RandomAccessFile(File file,String mode) |
第一个参数指定需要访问的文件,第二个参数指定访问模式。比较常用的两个模式是 ‘r’ 和 ‘rw’.
常用方法
1 | public void seek(long pos) throws IOException; |
标准I/O
System.in 标准输入流 InputStream 的对象,直接使用它只能读入字节数据
System.out 标准输出流 PrintStream 对象
System.err 标准错误输出流
readLine 从控制台中窗口读入一行文本字符串
类Scanner
创建Scanner类对象
1 | Scanner scanner = new Scannr(System.in) |
从指定的文本文件中读取字符串
1 | Scanner scanner = new Scanner(new File("data.txt")) |
常用方法
1 | public String nextLine(); |
Scanner 用于分割标志的分隔符时空白字符
对象化和序列化
ObjectOutputStream 时 OutputStream 所有的子类,并且继承了其中的所有方法。而且将指定对象写入当前流。