Java は、Web ページ、モバイル アプリケーション、モノのインターネットなどのさまざまな分野で広く使用されているプログラミング言語であり、優れたクロスプラットフォーム機能と強力なファイル操作機能を備えています。この記事では、Java でのファイル操作に焦点を当てます。
ファイル操作とは、ファイルに対する読み取り、書き込み、作成、削除、およびその他の関連操作を指します。 Java でのファイル操作は主に Java IO ライブラリによって実現されますが、Java IO ライブラリには NIO と IO の 2 種類があり、それぞれの使い方を詳しく紹介します。
1. IO ライブラリ
IO ライブラリは Java 1.0 で導入されました。入出力操作を実装するために使用されるクラス ライブラリのセットであり、さまざまなストリーム (Stream) 操作を提供します。ストリームを通じてファイルを読み書きできます。 IO ライブラリのプログラミングの考え方はバイト ストリーム (バイト単位) を指向しています。つまり、どのタイプのデータでもバイト データの読み取りと書き込みのみが可能です。
Java IO ライブラリの File クラスは、ファイル システム内のファイルまたはディレクトリを表します。 File クラスを通じて、ファイルの作成、削除、名前変更などのファイル関連の操作を実行できます。
1.1 ファイルまたはディレクトリの作成
ファイル システムでの新しいファイルまたは新しいディレクトリの操作に対応して、createNewFile() メソッドと mkdir() または mkdirs() メソッドをファイルまたはディレクトリを作成するための File クラス。
• 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);
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 1.4 で導入されましたこのバージョンは、Java IO ライブラリをさらにカプセル化したもので、より柔軟で効率的な操作モードを提供し、ノンブロッキング IO 操作をサポートし、同時読み取りおよび書き込み操作をサポートします。 IO ライブラリと比較して、NIO ライブラリのプログラミングの考え方はバッファ領域 (ByteBuffer) を重視しています。
NIO ライブラリでのファイル操作は IO ライブラリと似ており、File クラスはファイル関連の操作にも使用されます。 NIO ライブラリは IO ライブラリよりも効率的であるため、大きなファイルの処理に適しています。
1.1 ファイルまたはディレクトリの作成
ファイル システムでの新しいファイルまたは新しいディレクトリの操作に対応して、createNewFile() メソッドと mkdir() または mkdirs() メソッドをファイルまたはディレクトリを作成するファイルクラス、操作方法はIOライブラリと同じです。
1.2 ファイルまたはディレクトリの削除
ファイル システム内のファイルまたはディレクトリの削除に対応し、File クラスの delete() メソッドを使用してファイルまたはディレクトリを削除できます。操作方法はIO.ライブラリと同様です。
1.3 ファイルまたはディレクトリの名前変更
ファイル システムでのファイルまたはディレクトリの名前変更操作に対応して、File クラスの renameTo() メソッドを使用できます。操作メソッドは次のとおりです。 IOライブラリと同じです。
同样的,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 中国語 Web サイトの他の関連記事を参照してください。