検索

キーワード


【Java】java.nio.fileパッケージ(NIO.2)

  • 公開日:2021-05-02 23:31:38
  • 最終更新日:2021-05-02 23:38:47
【Java】java.nio.fileパッケージ(NIO.2)

当記事では、Java7から新たに追加された、ファイル、ファイル属性、およびファイル・システムにアクセスするといったファイル操作をJava上で行うためのパッケージである、java.nio.fileパッケージの概要について、Java Gold SE 11の資格を持つ著者が解説します。

サンプルコードなどの具体的な使用例は当記事では掲載しておりません。

java.nio.fileパッケージの具体的な使用例については、以下の記事を参照して下さい。

【Java】Pathオブジェクトを生成する方法(java.nio.fileパッケージ)

【Java】java.nio.fileパッケージの使用例①(ファイルの作成、存在チェック)

【Java】java.nio.fileパッケージの使用例②(移動・コピー、削除)

【Java】java.nio.fileパッケージの使用例③(ファイル属性の取得・変更)

【Java】FileChannelを使って高速にファイル入出力を行ってみた


また、Java6以前からのファイルを扱うパッケージであるjava.io.Fileクラスについては、こちらの記事を参照して下さい。

【Java】java.io.Fileクラスの使い方(ファイル・ディレクトリ操作、パス、ファイル名、拡張子)

【Java】java.io.Fileクラスの使い方(ファイル一覧の取得、フィルタ)


java.nio.fileパッケージとは?

NIO.2とは、New I/O(Input / Output)の略で、新しい入出力機能であることを表します。nioパッケージのうち、特にファイル操作を行うnio.fileパッケージを特にNIO.2と呼び、NIO.2でのファイル操作は、FileクラスではなくPathインターフェースで扱うことが推奨されています。

java.nio.filesパッケージの特徴として、主にファイルやディレクトリの場所を示すPathインターフェースと、ファイル操作を行うためのstaticメソッドを集めたFilesクラスを使い分けてファイルを扱うことが挙げられます。


java.nio.fileパッケージとjava.io.Fileクラスの違い

java上でファイル操作を行う方法として、java.io.Fileクラスを使う方法がありますが、失敗時に例外がスローされない、Windows / UNIXといったプラットフォームの違いによるファイルシステムの違いによって動作が一貫しないなどの欠点がありました。

java.nio.fileパッケージは、上記のjava.io.Fileクラスの欠点を補い、様々な機能を備えています。新しくJavaのコードを書くときには、基本的にjava.nio.fileパッケージを使ってファイル操作を記述することが推奨されていますが、古いシステムを使っているところではjava.io.Fileクラスを使ったコードやフレームワークもまだまだ多いため、両方とも使えるようにするのが望ましいです。

また、java.nio.fileパッケージjava.io.Fileクラスで同様の動作をするコードを記述した場合、java.nio.fileパッケージを使用したほうが短く簡潔に記述できる場合が多いです。

java.io.Fileクラスの使い方については、こちらの記事を参照して下さい。

【Java】java.io.Fileクラスの使い方(ファイル・ディレクトリ操作、パス、ファイル名、拡張子)

【Java】java.io.Fileクラスの使い方(ファイル一覧の取得、フィルタ)


基本的なファイル操作と、それに対応するjava.io.Fileクラス、java.nio.fileパッケージの機能を、以下の表にまとめます。

操作java.io.Fileクラスjava.nio.fileパッケージ
ファイル操作のためのオブジェクトの作成java.io.Filejava.nio.file.Path
ファイルの新規作成java.io.File.createNewFilejava.nio.file.Files.createFile
ディレクトリの新規作成java.io.File.mkdirjava.nio.file.Files.createDirectory
ファイル・ディレクトリの存在確認java.io.File.existsjava.nio.file.Files.exists, java.nio.file.Files.notExists
ファイル・ディレクトリの移動java.io.File.renameTojava.nio.file.Files.move
ファイル・ディレクトリの削除java.io.File.Deletejava.nio.file.Files.delete
絶対パスの取得java.io.File.getAbsolutePathjava.nio.file.Path.toAbsolutePath
ファイル名の取得java.io.File.getName
java.nio.file.Path.getName
親ディレクトリ名の取得java.io.File.getParentjava.nio.file.Path.getParent
ディレクトリ内のファイル一覧の取得java.io.File.listfilesjava.nio.file.Files.list

上記で紹介した機能のの具体的な使用例については、以下の記事を参照して下さい。

【Java】java.nio.fileパッケージの使用例①(ファイルの作成、存在チェック)

【Java】java.nio.fileパッケージの使用例②(移動・コ『ピー、削除)

【Java】java.nio.fileパッケージの使用例③(ファイル属性の取得・変更)


java.nio.channels.FileChannel

java.nio.channels.FileChannelクラスは、チャネルを使ってファイルに対してのデータの読み込みと出力を行います。チャネルは、ストリームと似た概念ですが、ストリームのように入力と出力に分かれていないのが特徴です。ストリームよりも複雑ですが、一般にストリームを使うより高速にファイルの読み込みと出力が行えます。

また、java.nio.channels.FileChannelクラスには、排他制御など並列処理をサポートするいくつかのメソッドが実装されています。

使い方については、以下の記事で紹介しています。

【Java】FileChannelを使って高速にファイル入出力を行ってみた


まとめ

当記事では、java.nio.filesパッケージの概要とjava.io.FIleクラスとの違い、そしてストリームよりも高速なファイルの読み込みと出力が行える

java.nio.channels.FileChannelクラスの概要について説明しました。

NIO.2はjava.io.FIleクラスや入出力ストリームを使う場合と比べて、機能や速度面で勝っており、ファイルを扱う際は基本的にはこちらを使うほうが良いです。java.nio.channels.FileChannelクラスは少々複雑ですが、プログラミングにおいて速度は大きなウェイトを占める要素であるため、その分取得できたときのリターンは大きいものになります。

関連記事:

【Java】Pathオブジェクトを生成する方法(java.nio.fileパッケージ)

【Java】java.nio.fileパッケージの使用例①(ファイルの作成、存在チェック)

【Java】java.nio.fileパッケージの使用例②(移動・コピー、削除)

【Java】java.nio.fileパッケージの使用例③(ファイル属性の取得・変更)

【Java】FileChannelを使って高速にファイル入出力を行ってみた

【Java】java.io.Fileクラスの使い方(ファイル・ディレクトリ操作、パス、ファイル名、拡張子)

【Java】java.io.Fileクラスの使い方(ファイル一覧の取得、フィルタ)


【著者】

ゆうさい

フォワードソフト株式会社のエンジニア。経験はまだ浅いものの、Java、Python、JavaScriptなど様々な言語の他、クラウドやネットワーク技術を勉強しています。PythonやVBAを使った自動化で楽をするのを考えるのが好きです。 Oracle Certified Java Programmer Gold SE 11、HTML5プロフェッショナル認定試験レベル2、AWSプラクティショナーなどの情報資格を保有しています。

よく読まれている記事
【Java】JSPでタグライブラリを使う(JSTL)

【Java】JSPでタグライブラリを使う(JSTL)

こんにちは。エンジニアの新田です!ここでは、システムエンジニアとして働いている私が、システム開発手法や開発言語について紹介していこうと思います。今回は、JSPの標準タグライブラリ「JSTL」について紹介します。Javaについて勉強している方、Webアプリケーションを構築したいと思っている方の参考になれば幸いです!関連記事リンク: 【Java】JSPの基本的な構文/【Java】JSPのアクションタグ

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!そもそもStringとは何?『 String 』... Java言語において文字列のデータ型を指します。基本デ

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!Stringクラスformatメソッドの文字列整形【java.utilパッケージ】Formatterクラスfo

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者にも✅、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!文字列を扱う3つのクラス【java.langパッケージ】java.langパッケージの文字列を扱うクラスにはS

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!プリミティブ型と参照型プログラム開発では型を持った変数を使ってデータのやり取りをしますが、データ型によって仕様