Java-nio-file

提供:Dev Guides
移動先:案内検索

Java NIO-ファイル

Java NIOパッケージは、Filesという名前のユーティリティAPIをもう1つ提供します。これは、主にPathオブジェクトで機能する静的メソッドを使用してファイルとディレクトリを操作するために基本的に使用されます。

Pathチュートリアルで述べたように、PathインターフェースはJava 7バージョンのファイルパッケージでJava NIOパッケージに導入されるため、このチュートリアルは同じFileパッケージ用です。

このクラスは、ファイル、ディレクトリ、または他の種類のファイルを操作する静的メソッドのみで構成されます。ほとんどの場合、ここで定義されたメソッドは、関連するファイルシステムプロバイダーに委任され、ファイル操作を実行します。

Filesクラスには、Java docsからも読み取ることができる多くのメソッドが定義されています。このチュートリアルでは、Java NIO Filesクラスのすべてのメソッドの中で重要なメソッドの一部をカバーしようとしました。

Filesクラスの重要なメソッド。

以下は、Java NIO Filesクラスで定義されている重要なメソッドです。

  • * createFile(Path filePath、FileAttribute attrs)*-Filesクラスは、指定されたPathを使用してファイルを作成するこのメソッドを提供します。

package com.java.nio;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class CreateFile {
   public static void main(String[] args) {
     //initialize Path object
      Path path = Paths.get("D:file.txt");
     //create file
      try {
         Path createdFilePath = Files.createFile(path);
         System.out.println("Created a file at : "+createdFilePath);
      }
      catch (IOException e) {
         e.printStackTrace();
      }
   }
}

出力

Created a file at : D:\data\file.txt
  • copy(InputStream in、Path target、CopyOption options)*-このメソッドは、指定された入力ストリームからすべてのバイトを指定されたターゲットファイルにコピーし、読み取りまたは書き込みされたバイト数をlong値として返します。 −
  • COPY_ATTRIBUTES -属性を新しいファイルにコピーします。 最終変更時刻属性。
  • REPLACE_EXISTING -存在する場合、既存のファイルを置き換えます。
  • NOFOLLOW_LINKS -ファイルがシンボリックリンクの場合、リンクのターゲットではなく、リンク自体がコピーされます。

package com.java.nio;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.List;
public class WriteFile {
   public static void main(String[] args) {
      Path sourceFile = Paths.get("D:file.txt");
      Path targetFile = Paths.get("D:fileCopy.txt");
      try {
         Files.copy(sourceFile, targetFile,
         StandardCopyOption.REPLACE_EXISTING);
      }
      catch (IOException ex) {
         System.err.format("I/O Error when copying file");
      }
      Path wiki_path = Paths.get("D:fileCopy.txt");
      Charset charset = Charset.forName("ISO-8859-1");
      try {
         List<String> lines = Files.readAllLines(wiki_path, charset);
         for (String line : lines) {
            System.out.println(line);
         }
      }
      catch (IOException e) {
         System.out.println(e);
      }
   }
}

出力

To be or not to be?
  • * createDirectories(Path dir、FileAttribute <?> …​ attrs)*-このメソッドは、存在しないすべての親ディレクトリを作成することにより、指定されたパスを使用してディレクトリを作成するために使用されます。
  • * delete(Path path)*-このメソッドは、指定されたパスからファイルを削除するために使用されます。指定されたパスにファイルが存在しない場合、またはファイルがディレクトリであり、空でなく削除できない場合、NoSuchFileExceptionをスローします。
  • * exists(Path path)*-このメソッドは、指定されたパスにファイルが存在するかどうかを確認するために使用されます。
  • * readAllBytes(Path path)*-このメソッドは、指定されたパスのファイルからすべてのバイトを読み取り、ファイルから読み取られたバイトを含むバイト配列を返します。

package com.java.nio;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
public class ReadFile {
   public static void main(String[] args) {
      Path wiki_path = Paths.get("D:file.txt");
      Charset charset = Charset.forName("ISO-8859-1");
      try {
         List<String> lines = Files.readAllLines(wiki_path, charset);
         for (String line : lines) {
            System.out.println(line);
         }
      }
      catch (IOException e) {
         System.out.println(e);
      }
   }
}

出力

Welcome to file.
  • * size(Path path)*-このメソッドは、指定されたパスのファイルのサイズをバイト単位で取得するために使用されます。
  • * write(Path path、byte [] bytes、OpenOption options)*-このメソッドは、指定されたパスのファイルにバイトを書き込むために使用されます。

package com.java.nio;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
public class WriteFile {
   public static void main(String[] args) {
      Path path = Paths.get("D:file.txt");
      String question = "To be or not to be?";
      Charset charset = Charset.forName("ISO-8859-1");
      try {
         Files.write(path, question.getBytes());
         List<String> lines = Files.readAllLines(path, charset);
         for (String line : lines) {
            System.out.println(line);
         }
      }
      catch (IOException e) {
         System.out.println(e);
      }
   }
}

出力

To be or not to be?