文章目录
- 绪论
- 输入流
- 输出流
- File类
- 文件输入 / 输出流
- 字节输入输出流
- 字符输入输出流
- End
绪论
首先如果我们在Java编写的一个程序中获得了想要的某种结果,那么在程序结束后,这个结果还存在嘛?不存在的,因为在Java程序运行时,程序会被加载到内存中在内存中运行,但是,在程序结束后虚拟机会自动释放内存空间,中间程序得到得结果也会消失,但是我们如果想保存这个结果呢?之前因为我们学习过使用JDBC技术链接数据库,这也能达到目的,但是对于某些长文本数据存储到数据库中就有些不便,那么这次我们学习Java的io技术可以将程序结果存储到本地的文件中,随取随存。
知识架构
输入流
Java中的输入流是一种用于从外部设备读取数据的机制。它提供了一组类和接口,用于从不同的数据源读取数据,如文件、网络连接、控制台等。
Java中的输入流主要分为以下几种类型:
- 字节流(Byte Stream):以字节为单位进行读写操作的流。常见的字节流类包括InputStream和OutputStream。
- 字符流(Character Stream):以字符为单位进行读写操作的流。常见的字符流类包括Reader和Writer。
- 缓冲流(Buffered Stream):缓冲流可以提高读写效率,减少对外部设备的访问次数。常见的缓冲流类包括BufferedInputStream、BufferedOutputStream、BufferedReader和BufferedWriter。
- 数据流(Data Stream):数据流用于读写基本数据类型,如int、float、double等。常见的数据流类包括DataInputStream和DataOutputStream。
- 转换流(Conversion Stream):转换流可以将一种类型的流转换为另一种类型的流,例如InputStreamReader可以将字节流转换为字符流。
常规常见输入流步骤:
- 创建输入流对象:根据需要创建相应的输入流对象,例如使用FileInputStream类创建字节流对象读取文件,使用BufferedReader类创建字符流对象读取文本文件。
- 打开连接:打开与外部设备的连接,例如使用open()方法打开文件。
- 读取数据:通过输入流对象读取数据。在读取数据时,可以使用输入流提供的方法逐个读取字节或字符,也可以使用输入流的读取方法一次读取多个字节或字符。
- 关闭连接:关闭与外部设备的连接,例如使用close()方法关闭文件。
输出流
Java中的输出流是一种用于将数据写入到外部设备的机制。它提供了一组类和接口,用于将数据从Java程序输出到不同的目标,如文件、网络连接、控制台等。
Java中的输出流主要分为以下几种类型:
- 字节流(Byte Stream):以字节为单位进行读写操作的流。常见的字节流类包括OutputStream和Writer。
- 字符流(Character Stream):以字符为单位进行读写操作的流。常见的字符流类包括Writer和OutputStream。
- 字符流(Character Stream):以字符为单位进行读写操作的流。常见的字符流类包括Writer和OutputStream。
- 字符流(Character Stream):以字符为单位进行读写操作的流。常见的字符流类包括Writer和OutputStream。
- 字符流(Character Stream):以字符为单位进行读写操作的流。常见的字符流类包括Writer和OutputStream。
使用输出流进行数据写入的一般步骤如下:
- 创建输出流对象:根据需要创建相应的输出流对象,例如使用FileOutputStream类创建字节流对象写入文件,使用PrintWriter类创建字符流对象写入文本文件。
- 创建输出流对象:根据需要创建相应的输出流对象,例如使用FileOutputStream类创建字节流对象写入文件,使用PrintWriter类创建字符流对象写入文本文件。
- 写入数据:通过输出流对象将数据写入到外部设备。在写入数据时,可以使用输出流提供的方法逐个写入字节或字符,也可以使用输出流的写入方法一次写入多个字节或字符。
- 关闭连接:关闭与外部设备的连接,例如使用close()方法关闭文件。
需要注意的是: 在使用输入输出流进行数据读取时,应该遵循“打开-使用-关闭”的原则
,及时关闭连接以释放资源。同时,应该根据实际需求选择合适的流类,以达到最佳的读写效果。
File类
Java中的File类是用于文件和目录操作的类。它提供了一种在Java程序中创建、读取、写入和删除文件的方式。
File类主要用于对文件增删查的操作,没有用于对文件内部数据的读写功能。
File类的主要功能包括:
- 创建文件或目录:可以使用File类的构造函数创建一个新的文件或目录。例如,File file = new File(“path/to/file.txt”)将创建一个名为file.txt的文件。如果文件已经存在,则不会创建新文件。
- 判断文件或目录是否存在:可以使用File类的exists()方法来判断文件或目录是否存在。如果文件或目录存在,则返回true,否则返回false。
- 获取文件或目录的属性:可以使用File类的各种方法获取文件或目录的属性,如文件名、文件大小、文件创建时间等。例如,getName()方法返回文件或目录的名称,length()方法返回文件的大小(以字节为单位),lastModified()方法返回文件最后修改的时间。
- 删除文件或目录:可以使用File类的delete()方法删除文件或目录。如果删除成功,则返回true,否则返回false。需要注意的是,如果文件或目录不存在,或者由于其他原因无法删除,则删除操作可能会失败。
- 获取文件或目录的路径:可以使用File类的getAbsolutePath()方法获取文件或目录的绝对路径。该路径是一个字符串,表示文件或目录在文件系统中的位置。
- 获取文件或目录的路径:可以使用File类的getAbsolutePath()方法获取文件或目录的绝对路径。该路径是一个字符串,表示文件或目录在文件系统中的位置。
- 获取文件或目录的名称:可以使用File类的getName()方法获取文件或目录的名称。例如,如果文件位于C:\Users\username\Documents\file.txt,则文件名将是file.txt。
- 创建文件夹:可以使用 mkdir() 或 mkdirs() 方法创建文件夹。 mkdir() 只创建最后一个不存在的父目录,而 mkdirs() 会创建所有不存在的父目录。
- 判断是否是文件:可以使用 isFile() 方法判断路径是否对应一个普通文件。如果是,返回 true;否则返回 false。
- 判断是否是目录:可以使用 isDirectory() 方法判断路径是否对应一个目录。如果是,返回 true;否则返回 false。
- 其他操作:File类还提供了一些其他的方法,如listFiles()方法返回一个包含指定目录下所有文件的数组,list()方法返回一个包含指定目录下所有文件和子目录的字符串数组等。
示例:输出某一文件夹中所有的文件信息(包括子文件夹):
需要注意的是,如果某个文件夹需要权限才能访问,那么使用File类的listFiles方法返回的是null,为了代码不出现错误,我们需要对此进行判断。
public static void main(String[] args) {
out_data(new File("E:\\简历"));
}
public static void out_data(File f){
//获取文件名或文件夹名
System.out.println("--------------"+f.getName()+"------------------");
File[] files = f.listFiles();
if(files == null) { return; }
for(File ft : files){
// 判断是否文件夹,是则继续往下递归
if(ft.isDirectory()) { out_data(ft); }
// 不是文件夹,则输出信息
else{ System.out.println(ft.getName()); }
}
System.out.println("--------------"+f.getName()+"------------------");
}
运行结果
文件输入 / 输出流
Java中的文件输入输出流是用于读取和写入文件的类。Java提供了两种类型的文件输入输出流:字节输入输出流和字符输入输出流。
二者的区别在于,字节流是以字节为单位进行读取,随读随取,可以读取除文本外任意文件;字符流也是以字节进行读取,但是不同点在于它遇到中文时会按中文的编码方式进行读取,而带有缓冲区机制。
字节输入输出流
字节输入输出流以字节为单位进行读写操作。Java中提供了以下几种字节输入输出流类:
- FileInputStream:用于从文件中读取字节数据。
- FileOutputStream:用于向文件中写入字节数据。
- BufferedInputStream:用于从文件中读取数据,并将数据缓存在内存中,以提高读取效率。
- BufferedOutputStream:用于向文件中写入数据,并将数据缓存在内存中,以提高写入效率。
- DataInputStream:用于从文件中读取基本数据类型,如int、float、double等。
- DataOutputStream:用于向文件中写入基本数据类型,如int、float、double等。
使用字节输入输出流进行文件读写的一般步骤如下:
- 创建输入输出流对象:使用上述类之一的构造函数创建输入输出流对象。例如,使用FileInputStream类创建文件输入流对象,使用FileOutputStream类创建文件输出流对象。
- 打开连接:使用open()方法打开文件,建立与文件的连接。
- 读取/写入数据:使用输入输出流提供的方法读取或写入数据。例如,使用read()方法从输入流中读取字节数据,使用write()方法向输出流中写入字节数据。
- 关闭连接:使用close()方法关闭文件,断开与文件的连接。
示例:读取文件
import java.io.FileInputStream;
import java.io.IOException;
public class FileReadingExample {
public static void main(String[] args) {
try (FileInputStream fileInputStream = new FileInputStream("path/to/file.txt")) {
int data;
while ((data = fileInputStream.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
示例:写入文件
import java.io.FileOutputStream;
import java.io.IOException;
public class FileWritingExample {
public static void main(String[] args) {
try (FileOutputStream fileOutputStream = new FileOutputStream("path/to/file.txt")) {
String data = "Hello, World!";
fileOutputStream.write(data.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
}
字符输入输出流
字符输入输出流以字符为单位进行读写操作。
Java中提供了以下几种字符输入输出流类:
- FileReader:用于从文件中读取字符数据。
- FileWriter:用于向文件中写入字符数据。
- BufferedReader:用于从文件中读取数据,并将数据缓存在内存中,以提高读取效率。
- BufferedWriter:用于向文件中写入数据,并将数据缓存在内存中,以提高写入效率。
- BufferedWriter:用于向文件中写入数据,并将数据缓存在内存中,以提高写入效率。
使用字符输入输出流进行文件读写的一般步骤如下:
- 创建输入输出流对象:使用上述类之一的构造函数创建输入输出流对象。例如,使用FileReader类创建文件输入流对象,使用FileWriter类创建文件输出流对象。
- 打开连接:使用open()方法打开文件,建立与文件的连接。
- 读取/写入数据:使用输入输出流提供的方法读取或写入数据。例如,使用read()方法从输入流中读取字符数据,使用write()方法向输出流中写入字符数据。
- 关闭连接:使用close()方法关闭文件,断开与文件的连接。
示例:读取文件
import java.io.FileReader;
import java.io.IOException;
public class FileReadingExample {
public static void main(String[] args) {
try (FileReader fileReader = new FileReader("path/to/file.txt")) {
int data;
while ((data = fileReader.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
示例:写入文件
import java.io.FileWriter;
import java.io.IOException;
public class FileWritingExample {
public static void main(String[] args) {
try (FileWriter fileWriter = new FileWriter("path/to/file.txt")) {
String data = "Hello, World!";
fileWriter.write(data);
} catch (IOException e) {
e.printStackTrace();
}
}
}
End
需要注意的是,在进行io读取操作时,应该遵循“打开-使用-关闭”的原则
,及时关闭连接以释放资源。同时,应该根据实际需求选择合适的流类,以达到最佳的读写效果。