JavaNIO-ファイル

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

パスチュートリアルで述べたように、パスインターフェイスはJava7バージョンのファイルパッケージでJavaNIOパッケージに導入されるため、このチュートリアルは同じファイルパッケージを対象としています。

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

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

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

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

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

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 value.LinkOptionとして次の値で返すために使用されます。−

    • COPY_ATTRIBUTES −属性を新しいファイルにコピーします(例:last-modified-time属性)。

    • 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) −このメソッドは、指定されたパスにファイルが存在するかどうかを確認するために使用されます。ファイルが存在する場合はtrueを返し、そうでない場合はfalseを返します。

  • 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?