每一秒钟的时间都值得铭记

0%

Java基础——File类和IO

File类

File是Java中的文件类,用于处理和文件相关的一些操作,例如文件的创建,删除等等。

构造方法

  • File(File parent, String child)
    从父抽象路径名和子路径名字符串创建新的 File实例。
  • File(String parent, String child)
    从父路径名字符串和子路径名字符串创建新的 File实例。
  • File(String pathname)
    通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
  • File(URI uri)
    通过将给定的 file: URI转换为抽象路径名来创建新的 File实例。

常用方法

  • boolean mkdir()
    创建由此抽象路径名命名的目录。
  • boolean mkdirs()
    创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。
  • boolean delete()
    删除由此抽象路径名表示的文件或目录。
  • boolean exists()
    测试此抽象路径名表示的文件或目录是否存在。
  • String getName()
    返回由此抽象路径名表示的文件或目录的名称。
  • String getPath()
    将此抽象路径名转换为路径名字符串。
  • boolean isDirectory()
    测试此抽象路径名表示的文件是否为目录。
  • boolean isFile()
    测试此抽象路径名表示的文件是否为普通文件。
  • String[] list()
    返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。

IO流

所谓IO流,便是Input和Output,即输入流和输出流,具体是指文件的输入流和输出流。
IO流分为很多类,其中最为常用的就是IO字节流和IO字符流,除此之外,还有缓冲流,转换流,序列化流,打印流等等。

IO字节流
IO字节流有两个上层接口,分别是InputStream和OutputStream接口,我们常用的具体实现类有FileInputStream和FileOutputStream,即文件输入字节流和文件输出字节流。

  • FileInputStream
常用方法 描述
int read(byte[] b) 从输入流读取一些字节数,并将它们存储到缓冲区 b 。
void close() 关闭此输入流并释放与流相关联的任何系统资源。
  • FileOutputStream
常用方法 描述
void write(byte[] b, int off, int len) 从指定的字节数组写入 len个字节,从偏移 off开始输出到此输出流。
void flush() 刷新此输出流并强制任何缓冲的输出字节被写出。
void close() 关闭此输出流并释放与此流相关联的任何系统资源。

IO字节流代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
public static void main(String[] args) throws Exception {
FileInputStream fis = new FileInputStream("a.txt");
FileOutputStream fos = new FileOutputStream("b.txt");
byte[] bytes = new byte[1024];
int len = 0;
while((len = fis.read(bytes)) != -1) {
fos.write(bytes,0,len);
}
fos.flush();
fos.close();
fis.close();
}

IO字符流
IO字符流有两个上层接口,分别是Reader和Writer接口,我们常用的具体实现类有FileReader和FileWriter,即文件输入字符流和文件输出字符流。

  • FileReader
常用方法 描述
int read(char ch) 从输入流读取一些字符数,并将它们存储到缓冲区 b 。
void close() 关闭此输入流并释放与流相关联的任何系统资源。
  • FileWriter
常用方法 描述
void write(char[] b, int off, int len) 从指定的字符数组写入 len个字节,从偏移 off开始输出到此输出流。
void flush() 刷新此输出流并强制任何缓冲的输出字符被写出。
void close() 关闭此输出流并释放与此流相关联的任何系统资源。

IO字符流代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
public static void main(String[] args) throws Exception {
FileReader fr = new FileReader("a.txt");
FileWriter fw = new FileWriter("b.txt");
char[] ch = new char[1024];
int len = 0;
while((len = fr.read(ch)) != -1) {
fw.write(ch,0,len);
}
fw.flush();
fw.close();
fr.close();
}

缓冲流

缓冲字节流

  • BufferedInputStream(InputStream in)
    创建一个 BufferedInputStream并保存其参数,输入流 in ,供以后使用。
常用方法 描述
int read(byte[] b, int off, int len) 从给定的偏移开始,将字节输入流中的字节读入指定的字节数组。
void close() 关闭此输入流并释放与流相关联的任何系统资源。
  • BufferedOutputStream(OutputStream out)
    创建一个新的缓冲输出流,以将数据写入指定的底层输出流。
常用方法 描述
void write(byte[] b, int off, int len) 从指定的字节数组写入 len个字节,从偏移 off开始到缓冲的输出流。
void flush() 刷新缓冲输出流。
void close() 关闭此输出流并释放与流相关联的任何系统资源。

缓冲字节流代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
public static void main(String[] args) throws Exception{
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("a.txt"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("b.txt"));
byte[] bytes = new byte[1024];
int len = 0;
while((len = bis.read(bytes)) != -1) {
bos.write(bytes,0,len);
}
bos.flush();
bos.close();
bis.close();
}

缓冲字符流

  • BufferedReader(Reader in)
    创建使用默认大小的输入缓冲区的缓冲字符输入流。
常用方法 描述
int read(char[] cbuf, int off, int len) 将字符读入数组的一部分。
String readLine() 读一行文字。
void close() 关闭流并释放与之相关联的任何系统资源。
  • BufferedWriter(Writer out)
    创建使用默认大小的输出缓冲区的缓冲字符输出流。
常用方法 描述
void write(char[] cbuf, int off, int len) 写入字符数组的一部分。
void newLine() 写一行行分隔符。
void flush() 刷新流。
void close() 关闭流,先刷新。

缓冲字符流代码示例:

1
2
3
4
5
6
7
8
9
10
11
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader("a.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));
String line = null;
while((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
}
bw.close();
br.close();
}

转换流

  • InputStreamReader(InputStream in, String charsetName)
    创建一个使用命名字符集的InputStreamReader。
常用方法 描述
int read(char[] cbuf, int offset, int length) 将字符读入数组的一部分。
void close() 关闭流并释放与之相关联的任何系统资源。
String getEncoding() 返回此流使用的字符编码的名称。
  • OutputStreamWriter(OutputStream out, String charsetName)
    创建一个使用命名字符集的OutputStreamWriter。
常用方法 描述
void write(char[] cbuf, int off, int len) 写入字符数组的一部分。
void flush() 刷新流。
void close() 关闭流,先刷新。
String getEncoding() 返回此流使用的字符编码的名称。

转换流代码示例:

1
2
3
4
5
6
7
8
9
10
11
public static void main(String[] args) throws IOException {
InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"),"UTF-8");
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("b.txt"),"UTF-8");
char[] ch = new char[1024];
int len = 0;
while((len = isr.read(ch)) != -1) {
osw.write(ch,0,len);
}
osw.close();
isr.close();
}

序列化流

  • ObjectInputStream(InputStream in)
    反序列化流:创建从指定的InputStream读取的ObjectInputStream。
常用方法 描述
Object readObject() 从ObjectInputStream读取一个对象。
int read(byte[] buf, int off, int len) 读入一个字节数组。
  • ObjectOutputStream(OutputStream out)
    序列化流:创建一个写入指定的OutputStream的ObjectOutputStream。
常用方法 描述
void writeObject(Object obj) 将指定的对象写入ObjectOutputStream。
void write(byte[] buf, int off, int len) 写入一个子字节数组。

【注意】需要序列化的对象,必须要实现Serializable接口。

序列化流代码示例:

1
2
3
4
5
6
7
8
9
public static void main(String[] args) throws IOException, ClassNotFoundException {
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("a.txt"));
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("a.txt"));
oos.writeObject(new User(1,"张三","123"));
User user = (User) ois.readObject();
System.out.println(user);
oos.close();
ois.close();
}

打印流

  • PrintStream(File file)
    使用指定的文件创建一个新的打印流,而不需要自动换行。
  • PrintStream(String fileName)
    使用指定的文件名创建新的打印流,无需自动换行。
常用方法 描述
void print(String s) 打印字符串。

System.out的本质就是一个打印流

打印流代码示例:

1
2
3
4
public static void main(String[] args) throws FileNotFoundException {
PrintStream out = new PrintStream(new File("a.txt"));
out.print("打印流");
}

思维导图

在这里插入图片描述
在这里插入图片描述

坚持原创技术分享,您的支持将鼓励我继续创作!
-------------这是我的底线^_^-------------