Java读写文件的几种方式

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/

点赞(30) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部