「こんにちは、アミーゴ。お久しぶりです。」

「やあ、ビラーボ。何の話をするの?」

「今日はファイルの操作について説明します。Java には、ハード ドライブ上のファイルを管理するために使用できる特別なクラス (File) があります。ファイルの内容を管理するには、FileInputStream、FileOutputStream などの他のクラスがあります。 」

ファイル、ファイル、パス - 1

「興味深いですね。でも、『ファイルを管理する』というのはどういう意味ですか?」

「それが今から説明することです。ファイルは作成、削除、名前変更などが可能です。ファイルの内容を扱う (読み取り、書き込み、変更) ことを行う実質的にすべてのクラスに File オブジェクトを渡すことができます。 。 例えば:"

ファイル名を FileInputStream に直接渡すことができます。
FileInputStream input = new FileInputStream("c:/path/a.txt");
または、File オブジェクトを個別に作成して、それを FileInputStrea に渡すこともできます。
File file = new File("c:/path/a.txt");
FileInputStream input = new FileInputStream(file);

「しかし、2 番目のオプションはもっと長いです。なぜこれらのファイル オブジェクトが必要なのか、私にはまだ理解できません。」

「この具体的な例については、あなたの言う通りです。」これは、どのようにしなければならないかの例ではなく、どのようにすればできるかを示しています。
ただし、特定のディレクトリにあるすべてのファイルのリストを表示する必要があると想像してください。File オブジェクトを使用してこれを行う方法は次のとおりです。」

コード
File folder = new File("c:/path/");
for (File file : folder.listFiles())
{
 System.out.println(file.getName());
}

listFiles()は、«c:/path/» で示されるフォルダー内のファイルの一覧を返すメソッドですか?」

「はい。でも、プログラマーは通常、『ディレクトリ』と言います。『フォルダー』という用語は比較的最近使われ始めましたが、原則的にはどちらの用語も正しいので、どちらを使っても構いません。」

「わかりました。getName () は何をするのですか? ファイルの名前を返しますか? 名前には正確に何が含まれますか? パスを含む完全な名前ですか、それともファイル自体の名前だけですか?」

「ファイル自体の名前のみ。フルパスについては、file.getAbsolutePath() があります。」

「では、File クラスには他にどのようなメソッドがあるのでしょうか?」

"これをみて:"

方法 説明
boolean isDirectory() File オブジェクトはディレクトリですか?
boolean isFile() オブジェクトはファイルですか?
long length() ファイルのサイズ/長さをバイト単位で返します。
boolean createNewFile() この名前のファイルがまだ存在しない場合は、新しい空のファイルを作成します。
boolean mkdir() ディレクトリを作成します。«mkdir» という名前は、«make directory» に由来しています。
boolean mkdirs() ディレクトリとそのすべてのサブディレクトリを作成します。
boolean delete() オブジェクトに関連付けられたファイルを削除します。オブジェクトがディレクトリの場合、ディレクトリ内にファイルがない場合にのみディレクトリが削除されます。
void deleteOnExit() プログラムの終了時に自動的に削除されるファイルの特別なリストにファイルを追加します。
File createTempFile(
String prefix,
String suffix,
File directory)
«dasd4d53sd» のような、ランダムに生成された一意の名前を持つ一時ファイルを作成します。
追加のパラメータは、名前のプレフィックスとサフィックスです。ディレクトリが指定されていない場合、ファイルは一時ファイル用の特別な OS ディレクトリに作成されます。
boolean exists() 同じ名前のファイルがハード ドライブ上に存在する場合は true を返します。
String getAbsolutePath() ファイルの完全パスとそのすべてのサブディレクトリを返します。
String getCanonicalPath() 正規のファイル パスを返します。
たとえば、パス«c:/dir/dir2/../a.txt»を«c:/dir/a.txt»に変換します。
String[] list() 現在のオブジェクトによって表されるディレクトリに含まれるファイル名の配列を返します。
File[] listFiles() 現在の File オブジェクトによって表されるディレクトリに含まれるファイルの配列を返します。
long getTotalSpace() ファイルが存在するディスク上の合計スペースの量 (バイト数) を返します。
long getFreeSpace() ファイルが存在するディスク上の空き容量 (バイト数) を返します。
boolean renameTo(File) ファイルの名前を変更します。つまり、ファイルの内容は実際には新しい名前になります。つまり、ファイル名を«c:/dir/a.txt»から«d:/out/text/b.doc»に変更できます。
String getName() パスを含まずにファイル名のみを返します。
String getParent() 名前自体は含まず、現在のファイルへのパス (ディレクトリ) のみを返します。
Path toPath() 現在の File オブジェクトに対応する Path オブジェクトを返します。

「おお! それほど小さなリストではありませんね? それに、ファイルの作成と削除、名前の変更など、かなり多くのことができるようですね...」

「では、現在のファイルのディレクトリを取得するには、getParent() を呼び出す必要があるのでしょうか?」

「はい、でも、File オブジェクトではなく、String (ファイル パス) を返します。実際、File クラスはそのメソッドのほぼすべてを複製しています。1 つのバージョンは String を返し、もう 1 つは File オブジェクトを返します。確認してください。」

File file = new File("c:/path/a.txt");
String directory = file.getParent();
File file = new File("c:/path/a.txt");
File directory = file.getParentFile();

ファイル パスを含む String があり、Fileオブジェクトが必要な場合は、コンストラクターを使用します。状況が逆の場合 ( Fileオブジェクトはあるが String が必要な場合)、getAbsolutePath () を使用します。例えば:"

String path = "c:/a.txt";
File file = new File(path);
File file = new File("c:/a.txt");
String path = file.getAbsolutePath();

"とった。"

「わかりました。それでは、次の小さなタスクです。現在のファイルと同じディレクトリにあるすべてのファイルの名前を表示します。」

「これ以上簡単なことはありません。ほら、見てください。」

コード
//Some file
File originalFile = new File("c:/path/dir2/a.txt");

//An object representing the directory
File folder = originalFile.getParentFile();

//Print the file list on screen
for (File file : folder.listFiles())
{
 System.out.println(file.getName());
}

「うーん、そうですね。」

「しかし、ファイルとディレクトリの両方に同じクラスである File が使用されているのは少し混乱します。私には、それはあまり論理的とは思えません。」

「歴史的な理由から、そのようになりました。ディレクトリは、ディスク上の特別な「空の」ファイルでした。もちろん、今では多くのことが変わりましたが、すべてが変わったわけではありません。今日私が持っているのはこれだけです。」

「興味深い授業をありがとう、ビラーボ。」