Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

Javaでは従来ファイルの入出力処理などで「java.io」パッケージのクラスを利用し、プログラム開発が行われていました。

しかし「java.io」パッケージには様々な問題が隠れていることも揶揄されており、新たなI/O処理用のパッケージとして「java.nio」パッケージが導入されています。

本記事では、「java.nio」パッケージの基本情報と簡単なサンプルコードを掲載しながらご紹介していきます。

Javaのnioとは


Javaのnioは、J2SE 1.4のリリース時にSun Microsystems社から標準I/Oを補完する形でリリースされたパッケージです。

nioは、New I/O APIの略称であり、既存のI/O処理を改善してより効率的に利用出来るように拡張されたパッケージです。

記事執筆時点(2020年12月)では、Java1.7で導入されたnio2と呼ばれるバージョンが主に利用されています。

java.ioとjava.nioの違いとは

従来から利用されているjava.ioとjava.nioの違いについても簡単にご紹介しておきます。

java.io

「java.io」は、様々な入出力クラスが提供されているパッケージです。

FileクラスやFileInputStreamクラスなどが代表的で、ファイル入出力関連のクラスが豊富に提供されています。

バイトストリームや文字列ストリームを使用するなど、ストリーム処理を中心としてI/O処理が実現可能でした。

java.nio

「java.nio」では、基本的な標準I/O処理を補完した形で、より高機能な処理を実現出来るよう改善されたパッケージです。

従来のストリーム処理ではなく、buffers(バッファ)やchannels(チャンネル)といった概念でI/O処理を実現することが出来るよう改善されています。

基本的には「java.nio」が上位互換となっているため、特段の理由が無い限りJava7以降では「java.nio」を利用することが推奨されます。

java.nioパッケージを使ってみよう


では実際にjava.nioパッケージを利用して、ファイルの読み込みと書き込み処理を実装してみましょう。

ファイルの読み込み

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;

public class Main {
  public static void main(String[] args) {
	  Path path = Paths.get("sample.txt");

	  try {
      	List<String> lineList = Files.readAllLines(path);
          for (String line : lineList) {
              System.out.println(line);
          }
      } catch (IOException e) {
          e.printStackTrace();
      }
  }
}

サンプルでは指定したパスのファイルを全行読み込み、読み込んだ内容をコンソールに1行ずつ表示するサンプルです。

Paths.getメソッド

9行目で実行しているPaths.getメソッドでは、1つ以上の文字列を指定することで、連結された最終的な文字列をPathオブジェクトに変換することが出来ます。

今回のサンプルでは、実行環境に格納した「sample.txt」ファイルを示す文字列をPathオブジェクトとして変換し、インスタンス名「path」に格納しています。

Files.readAllLinesメソッド

12行目のFiles.readAllLinesメソッドでは、Pathオブジェクトを引数に指定することでテキストファイルを開き、ファイルの全行を読み込んだのち文字列型のリスト形式で返却することが出来ます。

サンプルでは省略していますが、第2引数として文字コードを指定することも可能です。

ファイルの書き込み

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.List;

public class Main {
  public static void main(String[] args) {
	  Path path = Paths.get("sample.txt");
	  List<String> list = new ArrayList<>();
	  list.add("1行目");
	  list.add("2行目");
	  list.add("3行目");

	  try {
	      Files.write(path, list, StandardOpenOption.APPEND);

	      List<String> lineList = Files.readAllLines(path);
	      for (String line : lineList) {
	          System.out.println(line);
	      }
	  } catch (IOException e) {
	      e.printStackTrace();
	  }
  }
}

サンプルでは指定したファイルに、リストに格納した文字列を追記し、ファイルに記述された内容を1行ずつコンソールに表示しています。

Files.writeメソッド

13行目のPaths.getメソッドは、上述したファイル読み込みと同じで、今回は書き込み対象のファイルとしてPathオブジェクトを生成しておきます。

20行目が実際の書き込み処理で、第1引数に指定したPathオブジェクトのファイルに対して、第2引数のリストに設定された内容を、第3引数で指定した書き込み方法で記述します。

今回は第3引数に「StandardOpenOption.APPEND」を指定しており、ファイルへの追記を意味します。

ポテパンダの一言メモ

ファイルに新規で書き込みを行いたい場合には、StandardOpenOption.TRUNCATE_EXISTINGが利用可能です。
ただし、既に記述されている内容は削除されてしまうため注意が必要です。

また、今回はあくまでサンプルとして簡単に作成しているため、パスに指定したファイルが存在しない場合エラーとなる点にもご注意ください。

さいごに: Javaのnioパッケージは新規開発では積極的に利用していくべき


本記事では、Javaのnioパッケージについての基本的な情報と使い方をサンプルコードに沿ってご紹介してきました。

Java7以降で利用可能なnioについては、基本的にioパッケージの機能は補完されていることからも、新規開発では積極的に利用していくべきと言えます。

ただ、既存のJava7以前のソースを全て置き換えなければならないわけではないため、あくまで新規開発を中心に利用し、必要なタイミングで従来のソースコードに見直しを掛けるのが良いかと思います。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。