文件和流

Java中对文件的读取是以为流为单位的,对不同的设备在读取写入操作上是一样,不必关心具体的设备细节,实现跨平台。

所以一般来说,对文件名的读取写入,建议使用相对路径。

文件目录管理

使用java.io.File类对文件进行操作,操作的对象可以是文件,也可以是目录。

1
File file = new File("Data.txt");

创建了File对象,表示当前目录下的文件Data.txt.

常用方法

1
2
3
4
5
6
public boolean canRead();
public boolean canWrite();
public String getName(); //返回当前的File对象表示的文件或者目录名
public long length();
public boolean isFile(); //判断当前的File对象表示的是否是一个已存在的文件
public boolean isDirectory(); //判断当前的File对象是否是一个已存在的目录

一般来说,这个就是文件和目录的打开

文件字节流

主要有两个类 InputStream 和 OutputStream,分别控制了字节流的输入和输出

字节输入流

所有表示字节流的类都派生自抽象类java.io.InputStream。包括

java.io.FileInputStream 表示文件字节输入流

java.io.ByteArrayInputStream 表示 字节数组输入流,可从指定内存缓冲区中读取字节

java.io.FilterInputStream 用于过滤字节输入流

部分方法如下

1
2
3
public abstract int read() throws IOException;
public int read(byte[] b) throws IOException;
public void close() throws IOException;

字节输出流

所有表示字节流的类都派生自抽象类java.io.OutputStream。包括

java.io.FileOutputStream 表示文件字节输出流

java.io.ByteArrayOutputStream 表示 字节数组输出流,可从指定内存缓冲区中写入字节

java.io.FilterOutputStream用于过滤字节输出流

部分方法如下

1
2
3
4
public abstract int write() throws IOException;
public int write(byte[] b) throws IOException;
public void flush() throws IOException; //刷新当前输出流,并强制写出所有缓冲的输出字节
public void close() 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
2
RandomAccessFile(File file,String mode)
RandomAccessFile(String name, String mode)

第一个参数指定需要访问的文件,第二个参数指定访问模式。比较常用的两个模式是 ‘r’ 和 ‘rw’.

常用方法

1
2
3
4
5
public void seek(long pos) throws IOException;
// 将偏移设置到距离文件开始的pos个字节的位置,下一次读写将在偏移位置进行。打开文件时,当前偏移在文件开始位置,在文件中读写数据时,偏移位置相应向前移动

public long getFilePointer() 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
2
3
4
public String nextLine();
//返回并跳过输入信息当前行的其余部分
public String next();
// 查找并返回来自当前scanner 对象的下一个完整标记

Scanner 用于分割标志的分隔符时空白字符

对象化和序列化

ObjectOutputStream 时 OutputStream 所有的子类,并且继承了其中的所有方法。而且将指定对象写入当前流。