Java文件和流

Java文件和流

基本文件格式

在Java 中,一切文件皆是流。

  • 以字节为基础的流:输出或者输入的数据是二进制格式的。
  • 以字符为基础的流:输出或者输入的数据是字符串序列,每个字符占2字节。

常用类

  • Path接口:用来存放文件或者文件夹的地址
  • Paths类:利用静态方法来获取一个Path对象
  • Files类:提供静态方法来处理文件和文件夹
  • DirectoryStream接口:允许程序遍历文件夹内容
  • InputStreamReader类:读取器,用于读取某个流中的数据
  • FileInputStream类:将一个文件打开为流

路径相关操作

1
2
3
4
Path path = Paths.get(input.nextLine());  //根据文件名创建路径对象
path.getFileName();
path.isAbsolute(); //判断是否为绝对路径
path.toAbsolutePath(); //转换为绝对路径

文件相关操作

1
2
3
4
5
6
Files.exists(path);  //判断文件是否存在
Files.isDirectory(path); //判断是否为文件夹
Files.getLastModifiedTime(path); //获取最后一次的修改日期
Files.size(path); //获取文件大小
//创建文件夹流,其基本元素为
DirectoryStream<Path> directoryStream = Files.newDirectoryStream(path);

Formatter类

用于将数据输出到指定的位置

用法如下:

1
2
3
Formatter output = new Formatter(String);   //创建一个输出流
output.format(format, ...args); //将内容输出到指定位置
output.close(); //关闭输出流

文件结束标志:

Linux:< Enter >< Ctrl >d

Windows: < Ctrl > z

Scanner类

从指定位置中读取数据到内存中

1
2
3
4
5
6
Scanner input = new Scanner(Path);
input.hasNext(); //if there is more to read
input.nextInt(); //输入一个整数
input.next(); //输入一个单词
input.nextLine(); //输入一行
input.close(); //关闭输入流

InputStreamReader类

1
2
3
4
InputStreamReader reader = new InputStreamReader(FileInputStream("test.c"));        
reader.read(); //返回下一个字符,读取失败返回-1
reader.read(cbuf, offset, length); //读取特定长度字符到cbuf中,返回长度或-1
reader.ready(); //判断是否读取阻塞

对象序列化

Java可以将对象直接存储在文件中,然后直接从此类文件读取内容到对象内。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class ClassName implements Serializable;   //需要实现Serializable接口

//输出对象
//解释:
//首先创建了一个对象输出流,这个流定向先定向到文件输出流,然后文件输出流再定向到文件
//相当于数据逐层转化输出的过程
ObjectOutputStream output = new ObjectOutputStream(
Files.newOutputStream(Paths.get(String fileName)));

output.writeObject(objectName); //将参数中的对象写到定向位置

//输入对象
//解释:
//这个过程正好和输出对象相反,先把文件数据转换成文件输入流,然后把文件输入流转换成对象输入流
ObjectInputStream input = new ObjectInputStream(
Files.newInputStream(Paths.get(fileName)));

myObject objectName = (myObject)input.readObject(); //把文件中的对象读取到内存中

Java文件和流
http://example.com/2023/01/10/Java文件和流/
作者
Chen Shuwen
发布于
2023年1月10日
许可协议