Java文件与IO流操作原理详细分析
什么是IO流
Java中的IO流是用来处理输入和输出的流。IO流可以分为两种类型:字节流和字符流。它们之间的区别在于字节流以字节为单位进行操作,而字符流以字符为单位进行操作。不管是哪种类型的流,都分为输入流和输出流。输入流用于从文件中读取数据,输出流用于将数据写入到文件中。在Java IO流中,InputStream和Reader是用来读取数据的核心类,而OutputStream和Writer是用来将数据写入到文件中的核心类。
Java文件操作
在Java中,文件操作是通过File类来实现的。File类提供了很多方法来创建、读取和写入文件。下面是常用的File类方法:
File(String pathname)
:传递文件路径参数,创建一个File对象。boolean createNewFile()
:创建一个新的空文件,如果文件存在则不创建。boolean mkdir()
:创建一个新的空目录,如果目录存在则不创建。boolean delete()
:删除一个空文件或目录。boolean exists()
:判断文件或目录是否存在。String[] list()
:返回一个包含此目录中所有文件和子目录的字符串数组。File[] listFiles()
:返回一个包括此目录中所有文件和子目录的File数组。long lastModified()
:返回文件或目录最后修改的时间。
下面是一个创建文件并写入数据的示例:
import java.io.*;
public class FileDemo {
public static void main(String[] args) {
try {
String fileName = "demo.txt";
File file = new File(fileName);
if (file.createNewFile()) {
System.out.println("File created: " + file.getName());
FileWriter writer = new FileWriter(fileName);
writer.write("Hello World");
writer.close();
System.out.println("Successfully wrote to the file.");
} else {
System.out.println("File already exists.");
}
} catch (IOException e) {
System.out.println("An error occurred.");
e.printStackTrace();
}
}
}
IO流操作
字节流
Java IO流提供了许多字节流来处理二进制数据,其中最基础的字节流是InputStream和OutputStream。InputStream用于从输入流中读取字节,OutputStream用于将字节写入输出流中。下面是常用的InputStream和OutputStream方法:
int read(byte[] b)
:从输入流中读取数据并返回读取的数据的长度。void write(byte[] b)
:将指定数组中的字节写入输出流中。void flush()
:将缓冲区中的数据刷新到输出流中,保证数据完整性。void close()
:关闭输入/输出流。
下面是一个读取文件并输出内容的示例:
import java.io.*;
public class InputStreamDemo {
public static void main(String[] args) {
try {
File file = new File("demo.txt");
FileInputStream inputStream = new FileInputStream(file);
byte[] buffer = new byte[1024];
int length = inputStream.read(buffer);
System.out.println(new String(buffer, 0, length));
inputStream.close();
} catch (IOException e) {
System.out.println("An error occurred.");
e.printStackTrace();
}
}
}
字符流
除了字节流以外,Java IO流还提供了许多字符流来处理文本数据,其中最基础的字符流是Reader和Writer。Reader用于从输入流中读取字符,Writer用于将字符写入输出流中。下面是常用的Reader和Writer方法:
int read(char[] cbuf)
:从输入流中读取数据并返回读取的数据的长度。void write(char[] cbuf)
:将指定数组中的字符写入输出流中。void flush()
:将缓冲区中的数据刷新到输出流中,保证数据完整性。void close()
:关闭输入/输出流。
下面是一个从控制台输入并输出到文件的示例:
import java.io.*;
public class WriterDemo {
public static void main(String[] args) {
try {
File file = new File("output.txt");
if (file.createNewFile()) {
System.out.println("File created: " + file.getName());
} else {
System.out.println("File already exists.");
}
FileWriter writer = new FileWriter(file);
BufferedWriter bufferedWriter = new BufferedWriter(writer);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = bufferedReader.readLine()) != null) {
bufferedWriter.write(line);
bufferedWriter.newLine();
}
bufferedReader.close();
bufferedWriter.close();
System.out.println("Successfully wrote to the file.");
} catch (IOException e) {
System.out.println("An error occurred.");
e.printStackTrace();
}
}
}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java文件与IO流操作原理详细分析 - Python技术站