【Java】アプリ開発を目指すなら絶対に覚えておきたいFileクラスの基本
  • facebookページ
  • twitterページ
  • 2019.09.12

    【Java】アプリ開発を目指すなら絶対に覚えておきたいFileクラスの基本

    Fileクラスはプログラミングの中でも特に重要性が高く、アプリやシステム開発には必須と言えるクラスです。

    もちろんWebサイト構築にも必ず使われていると言っても良いほど使用頻度の高いクラスでもあります。

    Fileクラスを使用することでファイルの読み込み/書き込みや削除/複製などファイル関連の操作が可能になります。

    今回の記事ではそんなFileクラスの使い方について解説していきます。

    Fileクラスとは

    名前の通りファイルやディレクトリに関する全ての操作を行うクラスです。

    Fileクラスには作成や複製・削除はもちろん、属性の操作や確認などファイルおよびディレクトリにまつわるメソッドが沢山ありますが、これらのメソッドを使用する為にはまずFileクラスをインポートする必要が有ります。宣言は以下の通りです。

    また、Fileクラスの記述ルールは次のようになります。

    引数にはファイル名及びディレクトリ名やパスなどが入ります。

    新規作成

    ファイルの新規作成にはcreateNewFileメソッドは使用します。
    createNewFileメソッドでファイルを作成する場合には以下のように記述します。

    また同じようにディレクトリの新規作成にはmkdirメソッドを使用します。
    mkdirメソッドでの記述は以下の通りです。

    ポテパンダの一言メモ

    mkdirメソッドとmkdirsメソッド
    同じようなメソッドでmkdirsメソッドというものがあります。
    ディレクトリを作成する際に該当ディレクトリの親ディレクトリすら存在していない場合にはコンパイルエラーとなります。このような場合にはmkdirsメソッドを使うことで親ディレクトリもまとめて作成することが出来ます。

    では実際にファイルを新規作成するまでの流れをコードで見てみましょう。

    このコードではFileクラスのオブジェクトを作成しCreateNewFileメソッドでファイルを新規作成しています。インスタンスの引数には”test.txt”を指定している為、実行ファイルと同階層に「test.txt」というファイルが作成されます。

    削除

    不要なファイルを削除するには、Fileクラスのdeleteメソッドを使用します。
    deleteメソッドも記述ルールはcreateNewFileメソッドと同じです。

    ディレクトリを削除する場合には、引数にディレクトリ名を指定するだけです。

    ファイルに書き込む

    ファイルに文字列を書き込む際には二つのクラスを使用します。一つ目はFileWriterクラス、もう一つはPrintWriterクラスです。これらのクラスを使用するにはクラスをインポートする必要があります。

    二つのクラスは次のように記述します。

    実際にファイルに書き込む際にはprintlnメソッドを使用します。

    ファイルへ書き込む方法としては「上書き」と「追記」の二つがありますが、追記の場合にはFileWriterクラスの引数に「true」を指定するだけです。まずは次のコードを見てください。

    このコードでは、インスタンスを生成し、次にPrintWriterクラスの宣言をしています。

    そしてそのPrintWriterクラスの引数にBufferedWriterクラスでラッピングしたFileWriterクラスを指定することで、最終的にBufferedWriterクラスでバッファリングしたものをPrintWriterクラスで出力するという流れになっています。

    なぜこのような流れにしているかについては、PwintWriterクラスは実行されると直ちにストリームへの出力をするため、BufferedWriter でラップしバッファリングすることが推奨されているからです。

    またこのコードではFileWriterクラスの引数に「true」を指定している為、追記モードになっていることが分かります。最終処理としてcloseメソッドでファイル処理のリソースを開放することを忘れないようにしましょう。

    ファイルを読み込む

    FileReaderクラスを使用することでファイルを読み込むことが出来ます。

    FileReaderクラスを使用する際の注意点としては、”FileNotFoundException”という例外が発生する可能性があるため、必ず例外処理を忘れないようにしてください。

    FileReaderクラスを使ったコードは次のように記述します。

    readメソッドは1文字読み込むと自動でポインタが次のターゲットに移ります。この習性を利用する為、Whileでread処理を繰り返します。最後の文字になるとreadメソッドは-1を返してくるので処理はここで止まるというわけです。

    またwhileの中ではprintlnではなく敢えてprintを使用しています。これはprintlnを使うことで1文字ずつ改行されてしまうのを防ぐためです。printメソッドは最後の文字が処理された場合においても改行文字すら表示しようとするので自動的に改行されます。

    ファイルをコピーする

    コピーの方法についてはいくつかありますが、ここではJDK7以降で追加された”New I/O 2(NIO2)”というAPIを使った方法をご紹介します。

    NIO2のFileクラスを使用する為のクラスインポートは忘れないようにしてください。それでは次のコードを見てみましょう。

    このコードでは、指定したファイルを別のディレクトリにコピーしています。
    このようにcopyメソッドを使うと、コピー元のファイルパスとコピー先のファイルパスを指定するだけで簡単にコピーを実行することが出来ます。

    またコピー先に同名のファイルが存在する場合に上書きコピーする方法としては、copyメソッドにオプションで「StandardCopyOption.REPLACE_EXISTING」を指定するだけで大丈夫です。

    存在を確認する

    ファイルの存在を確認する為にはexistsメソッドを使用します。
    このメソッドも記述方法はcreateNewFileメソッドと一緒です。

    Fileクラスの処理はファイルが存在しない場合、例外(FileNotFoundException)が発生します。Fileクラスのメソッドを使用する際には必ず事前にexistsメソッドでファイルの有無を確認する癖をつけるようにしましょう。

    ポテパンダの一言メモ

    アクセス権限に注意!
    existsメソッドは、仮にファイルが存在してもアクセス権限が無いと”false”を返すので注意しましょう。

    まとめ

    今回はFileクラスについて説明しました。

    Fileクラスはどの言語においても頻繁に使うことになるクラスです。プログラミングを覚える中でこのクラスを外して考えることはまずあり得ませんので、完全に理解するまで何度も繰り返して構築し、色々なパターンを練習することを強くお勧めします。

    またこの他の方法でもまだまだやり方は無数にありますので、どの方法が一番処理速度が速いのかなどの学習もしてみると面白いかもしれません。


    ポテパンが提供するサービスについて

    本メディア「ポテパンスタイル」を運営する株式会社ポテパンは、エンジニアキャリア領域で複数サービスを提供しています。

    ポテパンフリーランス

    ポテパンフリーランス

    フリーランスエンジニアの方に高単価案件をご紹介しております。弊社ではフリーランス案件を常時300件ほど保有しており、その中からあなたに適した案件をご案内いたします。また、これから独立してフリーランスになる方の無料個別相談も承っております。フリーランスになった後の案件獲得方法やお金面(税金や保険など)についてお答えいたします!フリーエンジニアになりたい方向けのコンテンツも盛りだくさんです。

    ポテパンキャリア

    ポテパンキャリア

    エンジニア職専門の転職エージェントです。ポテパンキャリアでは、技術のわかるエージェントがあなたの転職をサポートします。エージェント自身がエンジニアなので、あなたと同じ目線で仕事内容や今後のキャリアについて一緒に考えることができます。年収800万円以上のハイスペック転職をご希望の方は「ポテパンプロフェッショナル」もご用意しておりますのでご利用下さいませ。

    ポテパンキャンプ

    ポテパンキャンプ

    ポテパンキャンプでは、RubyにてゼロからオリジナルのECサイトを作り上げてる3ヶ月間の実践型カリキュラムを提供しております。すでに本スクールの卒業生は、エンジニア職として様々な企業様に就職しております。なお、本スクールは受講料25万円と他社スクールに比べ格安となっており、またポテパンからご紹介させていただいた企業へ就職が決まった場合は、全額キャッシュバックいたします。



    株式会社ポテパンは、企業とエンジニアの最適なマッチングを追求しています。気になるサービスがあれば、ぜひ覗いてみてください!

    ポテクラバナー ポテプロバナー

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE

    ポテパンおすすめ案件