>  기사  >  Java  >  Java의 파일 작업

Java의 파일 작업

WBOY
WBOY원래의
2023-06-15 21:09:224342검색

Java는 웹 페이지, 모바일 애플리케이션, 사물 인터넷 등 다양한 분야에서 널리 사용되는 프로그래밍 언어로, 뛰어난 크로스 플랫폼 기능과 강력한 파일 작업 기능을 갖추고 있습니다. 이 기사에서는 Java의 파일 작업에 중점을 둘 것입니다.

파일 작업은 파일 읽기, 쓰기, 생성, 삭제 및 기타 관련 작업을 의미합니다. Java의 파일 작업은 주로 Java IO 라이브러리를 통해 구현됩니다. Java IO 라이브러리는 NIO와 IO의 두 가지 유형으로 나눌 수 있으며 다음에서는 이 두 라이브러리의 사용을 자세히 소개합니다.

1. IO 라이브러리

IO 라이브러리는 Java 버전 1.0에서 도입되었으며 다양한 스트림(Stream) 작업을 구현하는 데 사용되는 클래스 라이브러리입니다. 파일을 작성합니다. IO 라이브러리의 프로그래밍 아이디어는 바이트 스트림(바이트 단위)을 지향합니다. 즉, 모든 유형의 데이터에 대해 바이트 데이터만 읽고 쓸 수 있습니다.

  1. 파일 작업

Java IO 라이브러리의 File 클래스는 파일 시스템의 파일 또는 디렉터리를 나타냅니다. File 클래스를 통해 파일 생성, 삭제, 이름 바꾸기 등과 같은 파일 관련 작업을 수행할 수 있습니다.

1.1 파일 또는 디렉토리 생성

파일 시스템의 새 파일 또는 디렉토리 작업에 대응하여 File 클래스의 createNewFile() 및 mkdir() 또는 mkdirs() 메서드를 사용하여 파일 또는 디렉토리를 생성할 수 있습니다.

• createNewFile() 메서드: 새 파일을 생성하고 파일이 존재하는 경우 아무 작업도 수행하지 않으며 false를 반환합니다.

다음 코드 예제에서는 "test.txt"라는 파일을 생성합니다.

File file = new File("test.txt");
boolean result = file.createNewFile();  
System.out.println(result);

• mkdir() 메서드: 단일 수준 디렉터리를 생성합니다. 디렉터리가 이미 있으면 작업이 수행되지 않습니다.

다음 코드 예제에서는 "example"이라는 디렉터리를 만듭니다.

File file = new File("example");
boolean result = file.mkdir();  
System.out.println(result);

• mkdirs() 메서드: 다중 레벨 디렉터리를 만들고 해당 디렉터리가 이미 있는 경우 아무 작업도 수행하지 않습니다.

다음 코드 예제에서는 "example/child"라는 디렉터리를 만듭니다.

File file = new File("example/child");
boolean result = file.mkdirs();
System.out.println(result);

1.2 파일 또는 디렉터리 삭제

파일 시스템의 파일 삭제 또는 디렉터리 삭제 작업에 따라 File 클래스에서 delete를 사용할 수 있습니다( ) 메소드는 파일이나 디렉토리를 삭제합니다.

다음 코드 예제에서는 "test.txt" 파일을 삭제합니다.

File file = new File("test.txt");
boolean result = file.delete();
System.out.println(result);

1.3 파일 또는 디렉터리 이름 바꾸기

파일 시스템의 파일 이름 바꾸기 또는 디렉터리 작업에 대응하여 File에서 renameTo() 메서드를 사용할 수 있습니다. 수업 .

다음 코드 예제에서는 "test.txt"의 이름을 "test1.txt"로 바꿉니다.

File file = new File("test.txt");
File newFile = new File("test1.txt");
boolean result = file.renameTo(newFile); 
System.out.println(result);
  1. 파일 읽기 및 쓰기

Java IO 라이브러리는 파일 처리 읽기 및 문자 스트림 클래스를 위한 풍부한 바이트 스트림 및 문자 스트림 클래스 세트를 제공합니다. 쓰기 작업.

2.1 바이트 스트림

바이트 스트림은 데이터를 바이트 단위로 작동합니다. 일반적인 바이트 스트림에는 FileInputStream, FileOutputStream, BufferedInputStream 및 BufferedOutputStream이 포함됩니다.

• FileInputStream

FileInputStream은 입력 데이터를 바이트 스트림으로 변환하고 파일 내용을 읽는 데 사용되는 InputStream의 하위 클래스입니다. FileInputStream 클래스의 생성자를 사용하여 파일 입력 스트림 개체를 만들 수 있습니다.

다음 코드 예제는 FileInputStream을 사용하여 파일 내용을 읽는 것을 구현합니다.

FileInputStream fis = new FileInputStream("test.txt");
int data;
while ((data = fis.read()) != -1) {
   System.out.print((char) data);
}
fis.close();

• FileOutputStream

FileOutputStream은 출력 데이터를 바이트 스트림으로 변환하고 파일에 쓰는 데 사용되는 OutputStream의 하위 클래스입니다. FileOutputStream 클래스의 생성자를 사용하여 파일 출력 스트림 개체를 만들 수 있습니다.

다음 코드 예제는 FileOutputStream을 사용하여 파일에 문자열을 쓰는 것을 구현합니다.

String text = "Hello World!";
byte[] bytes = text.getBytes();
FileOutputStream fos = new FileOutputStream("test.txt");
fos.write(bytes);
fos.close();

2.2 문자 스트림

문자 스트림은 문자 단위로 데이터를 작동합니다. 일반적인 문자 스트림에는 FileReader, FileWriter, BufferedReader 및 BufferedWriter가 포함됩니다.

• FileReader

FileReader는 파일의 문자 스트림을 읽는 데 사용되는 Reader의 하위 클래스입니다. FileReader 클래스의 생성자를 사용하여 파일 입력 스트림 개체를 만들 수 있습니다.

다음 코드 예제는 FileReader를 사용하여 파일 내용을 읽는 것을 구현합니다.

FileReader fr = new FileReader("test.txt");
int data;
while ((data = fr.read()) != -1) {
   System.out.print((char) data);
}
fr.close();

• FileWriter

FileWriter는 파일에 문자열을 쓰는 데 사용되는 Writer의 하위 클래스입니다. FileWriter 클래스의 생성자를 사용하여 파일 출력 스트림 개체를 만들 수 있습니다.

다음 코드 예제에서는 FileWriter를 사용하여 파일에 문자열 쓰기를 구현합니다.

String text = "Hello World!";
FileWriter fw = new FileWriter("test.txt");
fw.write(text);
fw.close();

2. NIO 라이브러리

NIO 라이브러리(새 입력/출력)는 Java IO 라이브러리를 보완하는 Java 1.4 버전에 도입되었습니다. 캡슐화는 보다 유연하고 효율적인 작업 모드를 제공하고 비차단 IO 작업을 지원하며 동시 읽기 및 쓰기 작업을 지원합니다. IO 라이브러리에 비해 NIO 라이브러리의 프로그래밍 아이디어는 버퍼 영역(ByteBuffer)을 지향합니다.

  1. 파일 작업

NIO 라이브러리의 파일 작업은 IO 라이브러리와 유사하며 File 클래스는 파일 관련 작업에도 사용됩니다. NIO 라이브러리는 IO 라이브러리보다 효율적이므로 대용량 파일을 처리하는 데 더 적합합니다.

1.1 파일 또는 디렉토리 생성

파일 시스템의 새 파일 또는 새 디렉토리 작업에 대응하여 File 클래스의 createNewFile() 및 mkdir() 또는 mkdirs() 메서드를 사용하여 파일 또는 디렉토리를 생성할 수 있습니다. 동작방법은 IO 라이브러리와 동일합니다.

1.2 파일 또는 디렉토리 삭제

파일 시스템의 파일 삭제 또는 디렉토리 삭제에 대응하여 File 클래스의 delete() 메소드를 사용하여 파일 또는 디렉토리를 삭제할 수 있습니다. 작업 방법은 IO 라이브러리와 동일합니다.

1.3 파일 또는 디렉터리 이름 바꾸기

파일 시스템에서 파일 이름이나 디렉터리 이름 바꾸기 작업에 대응하여 File 클래스의 renameTo() 메서드를 사용할 수 있으며 작업 방법은 IO 라이브러리와 동일합니다.

  1. 文件读写

同样的,NIO库也提供了丰富的字节流和字符流类,用于进行文件的读写操作。

2.1 字节流

NIO库中的字节流类主要是基于通道和缓冲区(Buffer)的操作方式,常见的字节流类有FileChannel和ByteBuffer。

• FileChannel

FileChannel用于读写文件数据,它通常与ByteBuffer配合使用。我们可以使用FileChannel的open()方法创建文件通道。

下面的代码示例实现了使用FileChannel读取文件中的内容:

File file = new File("test.txt");
RandomAccessFile raf = new RandomAccessFile(file, "rw");
FileChannel fc = raf.getChannel();
ByteBuffer buffer = ByteBuffer.allocate(1024);
int data;
while ((data = fc.read(buffer)) != -1) {
   buffer.flip();
   while (buffer.hasRemaining()) {
      System.out.print((char) buffer.get());
   }
   buffer.clear();
}
fc.close();
raf.close();

• ByteBuffer

ByteBuffer提供了缓冲区,可用于读写文件数据。我们可以使用ByteBuffer的allocate()方法创建缓冲区。

下面的代码示例实现了使用ByteBuffer将字符串写入文件:

File file = new File("test.txt");
RandomAccessFile raf = new RandomAccessFile(file, "rw");
FileChannel fc = raf.getChannel();
ByteBuffer buffer = ByteBuffer.allocate(1024);
String text = "Hello World!";
buffer.put(text.getBytes());
buffer.flip();
fc.write(buffer);
fc.close();
raf.close();

2.2 字符流

NIO库中的字符流类主要是基于通道和缓冲区(Buffer)的操作方式,常见的字符流类有FileChannel、Charset和CharBuffer。

• FileChannel与ByteBuffer

它的操作方式同字节流,只是在使用ByteBuffer的时候需要设置编码方式,如下:

File file = new File("test.txt");
RandomAccessFile raf = new RandomAccessFile(file, "rw");
FileChannel fc = raf.getChannel();
ByteBuffer buffer = ByteBuffer.allocate(1024);
buffer.put("Hello World!".getBytes("UTF-8"));
buffer.flip();
CharBuffer charBuffer = Charset.forName("UTF-8").decode(buffer);
System.out.println(charBuffer.toString());
fc.close();
raf.close();

这段代码利用ByteBuffer将字符串写入文件,再将其通过Charset进行解码,创建Java字符串并输出。

• CharBuffer

CharBuffer同ByteBuffer类似,提供了缓冲区,可用于读写文件数据。其用法同ByteBuffer。

File file = new File("test.txt");
RandomAccessFile raf = new RandomAccessFile(file, "rw");
FileChannel fc = raf.getChannel();
CharBuffer buffer = CharBuffer.allocate(1024);
String text = "Hello World!";
buffer.put(text);
buffer.flip();
fc.write(Charset.forName("UTF-8").encode(buffer));
fc.close();
raf.close();

这段代码利用CharBuffer将字符串写入文件。

总结

Java IO库和NIO库各有优缺点,IO库操作简单而且容易理解,但是在处理大文件时效率较低;而NIO库操作稍微复杂,但是在处理大文件时更为高效。开发者可以根据自己实际需求选择合适的库进行文件操作。

위 내용은 Java의 파일 작업의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.