Java读写文件是开发中经常遇到的操作之一。本文介绍Java读写文件的几种方式,包括使用File类和IO流、NIO、Channel等方法。对每种方式都会进行详细的介绍和案例说明。
### 一、使用File类操作文件
Java提供了File类来操作文件和目录。File类可以用于创建、读取、写入和删除文件和目录等操作。下面我们介绍File类的常用方法和案例。
#### 1.创建文件和目录
使用File类的createNewFile()方法可以在指定目录下创建一个新的文件。如下:
```java
File file = new File("E:/test.txt");
if(file.createNewFile()){
System.out.println("文件创建成功!");
}else{
System.out.println("文件创建失败!");
}
```
使用File类的mkdir()方法可以在指定目录下创建一个新的目录。如下:
```java
File dir = new File("E:/test");
if(dir.mkdir()){
System.out.println("目录创建成功!");
}else{
System.out.println("目录创建失败!");
}
```
#### 2.读写文件内容
使用File类的FileReader和FileWriter类可以读写文件内容。如下:
```java
//读取文件内容
FileReader reader = null;
try {
reader = new FileReader("E:/test.txt");
int c;
while ((c = reader.read()) != -1) {
System.out.print((char) c);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
//写入文件内容
FileWriter writer = null;
try {
writer = new FileWriter("E:/test.txt");
writer.write("hello world");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (writer != null) {
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
```
#### 3.读取目录下的文件列表
使用File类的list()和listFiles()方法可以读取目录下的文件列表。如下:
```java
//列出指定目录下的所有文件和目录
File dir = new File("E:/test");
String[] files = dir.list();
for(String file:files){
System.out.println(file);
}
//列出指定目录下的所有文件和目录的文件对象
File[] fs = dir.listFiles();
for(File f:fs){
if(f.isDirectory()){
System.out.println("[目录]" + f.getAbsolutePath());
}else{
System.out.println("[文件]" + f.getAbsolutePath());
}
}
```
### 二、使用IO流读写文件
IO流是Java提供的对数据流的输入输出支持。Java可以使用InputStream和OutputStream、Reader和Writer等流来读写文件。下面我们介绍IO流读写文件的方法和案例。
#### 1.使用字节流读写文件
使用Java的FileInputStream和FileOutputStream类可以实现使用字节流读写文件。如下:
```java
//使用字节流读取文件
FileInputStream fis = null;
try {
fis = new FileInputStream("E:/test.txt");
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) != -1) {
System.out.println(new String(buffer, 0, len));
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fis != null) {
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
//使用字节流写入文件
FileOutputStream fos = null;
try {
fos = new FileOutputStream("E:/test.txt");
fos.write("hello world".getBytes());
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fos != null) {
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
```
#### 2.使用字符流读写文件
使用Java的FileReader和FileWriter类可以实现使用字符流读写文件。如下:
```java
//使用字符流读取文件
FileReader fr = null;
try {
fr = new FileReader("E:/test.txt");
char[] buffer = new char[1024];
int len;
while ((len = fr.read(buffer)) != -1) {
System.out.println(new String(buffer, 0, len));
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fr != null) {
fr.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
//使用字符流写入文件
FileWriter fw = null;
try {
fw = new FileWriter("E:/test.txt");
fw.write("hello world");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fw != null) {
fw.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
```
#### 3.使用缓存流读写文件
使用Java的BufferedReader和BufferedWriter类可以实现使用缓存流读写文件。如下:
```java
//使用缓存流读取文件
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("E:/test.txt"));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null) {
br.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
//使用缓存流写入文件
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new FileWriter("E:/test.txt"));
bw.write("hello world");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bw != null) {
bw.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
```
### 三、使用NIO读写文件
NIO是Java提供的基于缓存区的IO操作,相较于原先的IO操作,速度更快。下面我们介绍NIO读写文件的方法和案例。
#### 1.使用NIO读取文件
使用Java的FileChannel和ByteBuffer类可以实现使用NIO读取文件。如下:
```java
FileInputStream fis = null;
try {
fis = new FileInputStream("E:/test.txt");
FileChannel fc = fis.getChannel();
ByteBuffer buffer = ByteBuffer.allocate(1024);
int len;
while ((len = fc.read(buffer)) != -1) {
buffer.flip();
byte[] bytes = new byte[len];
buffer.get(bytes, 0, len);
System.out.println(new String(bytes));
buffer.clear();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fis != null) {
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
```
#### 2.使用NIO写入文件
使用Java的FileChannel和ByteBuffer类可以实现使用NIO写入文件。如下:
```java
FileOutputStream fos = null;
try {
fos = new FileOutputStream("E:/test.txt");
FileChannel fc = fos.getChannel();
ByteBuffer buffer = ByteBuffer.wrap("hello world".getBytes());
fc.write(buffer);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fos != null) {
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
```
### 四、使用Channel读写文件
Channel是Java NIO提供的另一种数据传输的方式。Channel提供了一种全新的数据传输方式,支持可以同时读写数据、异步读写数据等特性。下面我们介绍Channel读写文件的方法和案例。
#### 1.使用FileChannel读写文件
使用Java的FileChannel类可以实现读写文件。如下:
```java
FileInputStream fis = null;
try {
fis = new FileInputStream("E:/test.txt");
FileChannel fcIn = fis.getChannel();
FileOutputStream fos = new FileOutputStream("E:/test2.txt");
FileChannel fcOut = fos.getChannel();
ByteBuffer buffer = ByteBuffer.allocate(1024);
while (fcIn.read(buffer) != -1) {
buffer.flip();
fcOut.write(buffer);
buffer.clear();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fis != null) {
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
FileOutputStream fos = null;
try {
fos = new FileOutputStream("E:/test.txt");
FileChannel fc = fos.getChannel();
ByteBuffer buffer = ByteBuffer.wrap("hello world".getBytes());
fc.write(buffer);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fos != null) {
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
```
#### 2.使用AsynchronousFileChannel读写文件
Java的AsynchronousFileChannel提供了异步读写文件的能力。异步读写可以提高性能,同时不会阻塞线程。下面我们介绍AsynchronousFileChannel读写文件的方法和案例。
```java
AsynchronousFileChannel afc = AsynchronousFileChannel.open(Paths.get("E:/test.txt"), StandardOpenOption.READ);
ByteBuffer buffer = ByteBuffer.allocate(1024);
afc.read(buffer, 0, buffer, new CompletionHandler @Override public void completed(Integer result, ByteBuffer attachment) { attachment.flip(); System.out.println(new String(attachment.array())); attachment.clear(); } @Override public void failed(Throwable exc, ByteBuffer attachment) { exc.printStackTrace(); } }); ``` ```java AsynchronousFileChannel afc = AsynchronousFileChannel.open(Paths.get("E:/test.txt"), StandardOpenOption.WRITE); ByteBuffer buffer = ByteBuffer.wrap("hello world".getBytes()); afc.write(buffer, 0, buffer, new CompletionHandler @Override public void completed(Integer result, ByteBuffer attachment) { System.out.println("write " + result + " bytes"); } @Override public void failed(Throwable exc, ByteBuffer attachment) { exc.printStackTrace(); } }); ``` 综上,我们介绍了Java读写文件的几种方式,包括使用File类和IO流、NIO、Channel等方法。在实际开发中,根据需要选择合适的方式来读写文件,以便实现更加高效、方便的操作。 如果你喜欢我们三七知识分享网站的文章,
欢迎您分享或收藏知识分享网站文章
欢迎您到我们的网站逛逛喔!https://www.37seo.cn/
发表评论 取消回复