第17章 ファイルを管理する
ファイルを管理するに関する基本的な考え方について説明します
homepage
# **ファイルを管理する** *** Javaではファイルを扱うにはFileクラスを使います。 ## **1.Fileクラス** 取り扱いたいファイルに対して1つのFileクラスのオブジェクトを対応させます。どのファイルを対象としているかを特定するには、ファイルが置いてある場所(ディレクトリ)とファイルの名前が必要になります。まずは絶対パスでファイル名を指定してみましょう。 ``` File オブジェクト名 = new File(ファイル名); ``` 対象とするファイル名をディレクトリの位置+ファイル名の形で指定します。例えば下記のようになります。 ``` File file = new File("C:\\Test\\test.txt"); ``` >注意:ファイル名を指定する時に、「C:¥Test¥test.txt」ではなく「C:¥¥Test¥¥test.txt」のように「¥」を2つ重ねて記述します。これは文字列の中で「¥」は特別な意味を持つ単語のため、特別な意味ではなく単なる「¥」ですということを意味するため「¥」を2つ重ねて「¥¥」と記述します。 下記のサンプルでは「Cドライブ」のルートディレクトリ(つまりC:¥のことです)に含まれるファイルやディレクトリ一覧を取得しています。(listメソッドの使い方は次のページ以降で詳しく見てみます)。 #### **・import** import文は、他のパッケージ内のクラスやインターフェイスを参照するために利用する。 ただし、上記は必須ではない。 ``` import パッケージ名.クラス名; import java.util.Calendar; import java.util.* ``` #### **例** [JSample17_1.java] ``` package JFile; import java.io.File; public class JSample17_1 { public static void main(String args[]) { File cdirectory = new File("C:\\"); String filelist[] = cdirectory.list(); for (int i = 0; i < filelist.length; i++) { System.out.println(filelist[i]); } } } ``` #### **実行結果**(ローカルの環境によって、結果が違います。) $Recycle.Bin<br> Documents and Settings<br> Drivers<br> hiberfil.sys<br> inetpub<br> Intel<br> pagefile.sys<br> PerfLogs<br> Program Files<br> Program Files (x86)<br> ProgramData<br> Recovery<br> swapfile.sys<br> System Volume Information<br> Test<br> Users<br> Windows <br> ## **2.ファイルかディレクトリかの判別** #### **例** [JSample17_2.java] ``` package JFile; import java.io.File; public class JSample17_2 { public static void main(String args[]) { File cdirectory = new File("C:\\"); File filelist[] = cdirectory.listFiles(); for (int i = 0; i < filelist.length; i++) { if (filelist[i].isFile()) { System.out.println("[F]" + filelist[i].getName()); } else if (filelist[i].isDirectory()) { System.out.println("[D]" + filelist[i].getName()); } else { System.out.println("[?]" + filelist[i].getName()); } } } } ``` #### **実行結果**(ローカルの環境によって、結果が違います。) [D]$Recycle.Bin<br> [D]Documents and Settings<br> [D]Drivers<br> [F]hiberfil.sys<br> [D]inetpub<br> [D]Intel<br> [F]pagefile.sys<br> [D]PerfLogs<br> [D]Program Files<br> [D]Program Files (x86)<br> [D]ProgramData<br> [D]Recovery<br> [F]swapfile.sys<br> [D]System Volume Information<br> [D]Test<br> [D]Users<br> [D]Windows<br> <br> ## **3.ファイルのパスの取得** Fileクラスで用意されている"getAbsolutePath"メソッドは絶対パスによるファイルの位置と名前を取得できます。 ``` public String getAbsolutePath() ``` では簡単なサンプルで試してみます。「C:¥Test」ディレクトリに「test.txt」という名前のファイルを用意します。そしてJavaのサンプルプログラムも同じディレクトリに設置し、相対パスで指定した「test.txt」からFileクラスのオブジェクトを作成し、絶対パスでの位置と名前を取得してみましょう。 #### **例** [JSample17_3.java] ``` package JFile; import java.io.File; public class JSample17_3{ public static void main(String args[]){ File file = new File("test.txt"); String path = file.getAbsolutePath(); System.out.println("File:" + path); } } ``` #### **実行結果**(ローカルの環境によって、結果が違います。) File:C:\pleiades\workspace\MyClass\test.txt ## **4.ファイルを作成する** ファイルを作成するには、FileクラスのcreateNewFileメソッドを使用します。 createNewFileメソッドは、boolean型の値を返します。 ``` public boolean createNewFile() throws IOException ``` 以下にcreateNewFileメソッドを使用した、ファイルの作成方法を記述します。 #### **例** [JSample17_4.java] ``` package JFile; import java.io.File; import java.io.IOException; public class JSample17_4 { public static void main(String args[]) { File newfile = new File("C:\\Test\\newtest.txt"); try { if (newfile.createNewFile()) { System.out.println("ファイルの作成に成功しました"); } else { System.out.println("ファイルの作成に失敗しました"); } } catch (IOException e) { System.out.println(e); } } } ``` #### **実行結果** ファイルの作成に成功しました <br> ## **5.ディレクトリを作成する** ディレクトリを作成するには、Fileクラスのmkdirメソッドを使用します。 mkdirメソッドは、boolean型の値を返します。 ``` public Boolean mkdir() ``` 次に作成したFileクラスのオブジェクトに対して"mkdir"メソッドを実行します。 ``` File newdir = new File("c:¥¥tmp¥¥sub"); newdir.mkdir(); ``` これでディレクトリが作成されました。 #### **例** [JSample17_5.java] ``` package JFile; import java.io.File; public class JSample17_5 { public static void main(String args[]) { File newfile = new File("C:\\Test\\Sub"); if (newfile.mkdir()) { System.out.println("ディレクトリの作成に成功しました"); } else { System.out.println("ディレクトリの作成に失敗しました"); } } } ``` #### **実行結果** ディレクトリの作成に成功しました <br> ## **6.ファイルの確認と削除** #### **例** [JSample17_6.java] ``` package JFile; import java.io.File; public class JSample17_6 { public static void main(String args[]) { File file = new File("C:\\Test\\test.txt"); if (file.exists()) { if (file.delete()) { System.out.println("ファイルを削除しました"); } else { System.out.println("ファイルの削除に失敗しました"); } } else { System.out.println("ファイルが見つかりません"); } } } ``` #### **実行結果** ファイルを削除しました <br> ## **7.読み込みの許可と書き込みの許可** **・canReadメソッド:** 該当のファイルが読めるかどうかの確認 ``` public boolean canRead() ``` **・canWriteメソッド:** 書き込みが出来るかどうかの確認 ``` public boolean canWrite() ``` **・setReadOnlyメソッド:** 書き込み不可(読み取り専用)にする ``` public boolean setReadOnly() ``` #### **例** [JSample17_7.java] ``` package JFile; import java.io.File; import java.io.IOException; public class JSample17_7 { public static void main(String args[]) { File file = new File("C:\\Test\\test.txt"); // test.txtの作成 if (file.exists()) { } else { try { file.createNewFile(); } catch (IOException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } } // test.txtファイルの読み込みと書き込みの可・否を確認 canReadWrite(file); if (file.setReadOnly()) { System.out.println("ファイルを読み取り専用にしました"); } else { System.out.println("読み取り専用に変更が失敗しました"); } } private static void canReadWrite(File file) { if (file.canRead()) { System.out.println("ファイルは読み込み可能です"); } if (file.canWrite()) { System.out.println("ファイルは書き込み可能です"); } } } ``` #### **実行結果** ファイルは読み込み可能です<br> ファイルは書き込み可能です<br> ファイルを読み取り専用にしました *** > **練習** >> **問題**[JEx17_1.java] Javaの問題のフォルダに"JEx17_1.java"を作成ください。
content
戻る