Javaでは、Fileクラスjava.ioパッケージには、あなたのプログラム内のファイルやディレクトリを操作したい場合は、それはFileクラスを介して行うことが可能であること、ディスクファイルそのものを表している唯一のオブジェクトです。Fileクラスには、このような、リネームファイルやディレクトリを作成、削除などのファイルを、操作するためのいくつかの方法を定義します。
あなたは、ファイル自体の内容にアクセスする必要がある場合はFileクラスは、ファイル自体の内容にアクセスすることはできません、あなたは、入力/出力ストリームを使用する必要があります。
Fileクラスは、コンストラクタ次の3つの形態を提供します。
File(String path):如果 path 是实际存在的路径,则该 File 对象表示的是目录;如果 path 是文件名,则该 File 对象表示的是文件。
File(String path, String name):path 是路径名,name 是文件名。
File(File dir, String name):dir 是路径对象,name 是文件名。
コンストラクタのいずれかを使用すると、ファイル操作を提供してメソッドを呼び出した後、Fileオブジェクトを作成することができます。
Fileクラスの一般的な方法
メソッド名 | 説明 |
---|---|
ブールcanRead() | 読書のための指定されたファイルからアプリケーションかどうかをテストします |
ブールcanWrite() | アプリケーションは、現在のファイルを書き込むことができるかどうかをテスト |
削除ブール値() | 電流を削除するファイルを指定します。 |
ブール値が存在します() | このファイルがあるかどうかをテスト |
文字列getAbsolutePath() | このオブジェクトによって表されるファイルが絶対パス名で返します。 |
文字列のgetName() | (それがパスで、そして最終的にサブパス名が返された場合)、オブジェクトの現在のファイル名やパス名を返します。 |
文字列のgetParent() | 現在のディレクトリに対応するFileオブジェクト(最後のサブディレクトリ)親ディレクトリ名を返します。 |
ブールisAbsolute() | 現在のファイルのファイル・オブジェクトは、絶対パス名を表しているかどうかをテストします。この方法は、異なるプラットフォームの違いを排除し、それが直接ファイルを絶対パスにオブジェクトかどうかを判断することができます。パス名の先頭にスラッシュであればUNIX / Linuxの/ BSDシステムでは、/、それは絶対パスにFileオブジェクトが対応することを示し、Windowsシステムでは、パスはドライブ文字で始まる場合、それは絶対パスです。 |
ブールisDirectory() | 現在のファイルのファイル・オブジェクトがパスを表すかどうかをテスト |
ブールISFILE() | 現在のファイルのFileオブジェクトは、「通常の」ファイルを表しているかどうかをテスト |
長いLASTMODIFIED() | 現在のファイルのFileオブジェクトは最終修正時刻を表す返します |
長い長さ() | Fileオブジェクトのファイルの長さは電流を表し返します。 |
文字列[]リスト() | 戻り値このFileオブジェクトのリストは、ファイルへのパスを指定します |
文字列[]リスト(FilenameFilter) | Fileオブジェクトは、指定されたフィルタの基準を満たす、現在のディレクトリに指定されたファイルのリストを返します。 |
ブールMKDIR() | そのパス名このFileオブジェクトで指定されたディレクトリを作成します。 |
ブールmkdirs() | そのパス名このFileオブジェクトで指定されたディレクトリを作成します。 |
ブールrenameTo(ファイル) | 現在のファイルが指定されたパラメータファイルに指定した名前を変更したファイルオブジェクトは、パス名を指定しています |
Fileクラスには、次の2つの一般的に使用される定数があります。
public static final String pathSeparator:指的是分隔连续多个路径字符串的分隔符,Windows 下指;。例如 java -cp test.jar;abc.jar HelloWorld。
public static final String separator:用来分隔同一个路径字符串中的目录的,Windows 下指/。例如 D:/Software/Common Files。
注:あなたは、定数名は、すべて大文字ではありません標準の命名規則を満たしていないFileクラスで定義された名前の定数を参照することができ、かなりの期間後のJavaの開発、命名規則が進化している間に、Fileクラスの出現理由以前、これらは、Javaの歴史によって残さ問題で、命名規則の厳格な要件を持っていませんでした。
Windows 的路径分隔符使用反斜线“\”,而 Java 程序中的反斜线表示转义字符,所以如果需要在
Windows 的路径下包括反斜线,则应该使用两条反斜线或直接使用斜线“/”也可以。Java 程序支持将斜线当成平台无关的路径分隔符。
/javaspace/hello.javaまたはD:\ javaspace \ hello.javaパスの線に沿って\ javaspace \ hello.java、Javaで使用され、Dする必要があります:あなたは、WindowsオペレーティングシステムD内のファイルがあるとします。
ファイルの属性を取得します。
Javaでファイルの属性情報を取得する最初のステップは、既存のファイルへのファイル・クラス・オブジェクトとポイントを作成し、操作された表1のメソッドを呼び出すことです。
\ WINDOWS \ notepad.exeを:Cにあるファイルがあります。取得するためのJavaプログラムを書くと、ファイルの長さが書き込み可能である最終更新日を表示し、ファイルの属性情報パス。コードは以下の通りであります:
public class Test {
public static void main(String[] args) {
String path = "C:/windows/"; // 指定文件所在的目录
File f = new File(path, "notepad.exe"); // 建立File变量,并设定由f变量引用
System.out.println("C:\\windows\\notepad.exe文件信息如下:");
System.out.println("============================================");
System.out.println("文件长度:" + f.length() + "字节");
System.out.println("文件或者目录:" + (f.isFile() ? "是文件" : "不是文件"));
System.out.println("文件或者目录:" + (f.isDirectory() ? "是目录" : "不是目录"));
System.out.println("是否可读:" + (f.canRead() ? "可读取" : "不可读取"));
System.out.println("是否可写:" + (f.canWrite() ? "可写入" : "不可写入"));
System.out.println("是否隐藏:" + (f.isHidden() ? "是隐藏文件" : "不是隐藏文件"));
System.out.println("最后修改日期:" + new Date(f.lastModified()));
System.out.println("文件名称:" + f.getName());
System.out.println("文件路径:" + f.getPath());
System.out.println("绝对路径:" + f.getAbsolutePath());
}
}
本明細書で使用されるファイル・クラスのコンストラクタ上記のコードの最初のパラメータは、ファイルの場所を指定し、C:/ファイルの実際のパスとして、第二の引数を指定したファイル名。作成されたファイル・クラス・オブジェクトは、最終的な業績に示すように、対応する方法属性を呼び出すことによって取得次いでF、Fです。
C:\windows\notepad.exe文件信息如下:
============================================
文件长度:193536字节
文件或者目录:是文件
文件或者目录:不是目录
是否可读:可读取
是否可写:可写入
是否隐藏:不是隐藏文件
最后修改日期:Mon Dec 28 02:55:19 CST 2016
文件名称:notepad.exe
文件路径:C:\windows\notepad.exe
绝对路径:C:\windows\notepad.exe
ファイルの作成と削除
ファイルの種類は、既知のファイルのプロパティ情報を取得することができるだけでなく、あなたはまた、指定したパスにファイルを作成し、ファイルを削除することができます。でCreateNewFile()メソッド、あなたがdelete()メソッドを呼び出す必要があり、削除ファイルと呼ばれるファイルのニーズを作成します。作成または削除するかどうかのファイルは、通常、最初の呼び出しは、ファイルが存在するかどうかを判断するために()メソッドが存在するです。
それが作成し、それを削除し、存在する場合は、プログラムが起動は、それが存在しない場合は作成されたときにファイルが存在するかどうかをCで作成されたことは、検出をtest.txtというファイルをドライブ。
次のようにコードは次のとおりです。
public class Test {
public static void main(String[] args) throws IOException {
File f = new File("C:\\test.txt"); // 创建指向文件的File对象
if (f.exists()) // 判断文件是否存在
{
f.delete(); // 存在则先删除
}
f.createNewFile(); // 再创建
}
}
プログラムを実行した後にCディスクで見つけることができtest.txtというファイルを作成されています。しかしながら、異なるオペレーティングシステム、パス区切り文字は、例えば、同じではありません。
Windows 中使用反斜杠\表示目录的分隔符。
Linux 中使用正斜杠/表示目录的分隔符。
まあ、Javaプログラム自体ポータビリティ機能するので、書き込み時の最適なパスを自動的に移植の目的を達成するように、上のオペレーティングシステムが存在するに従って、セパレータの要件に合わせてローカルのオペレーティングシステムを使用することができます。この機能を実現するには、クラスが提供するファイルで2つの定数を使用する必要があります。
次のようにコードを変更します。
public static void main(String[] args) throws IOException {
String path = "C:" + File.separator + "test.txt"; // 拼凑出可以适应操作系统的路径
File f = new File(path);
if (f.exists()) // 判断文件是否存在
{
f.delete(); // 存在则先删除
}
f.createNewFile(); // 再创建
}
プログラムと同じ先行プログラムの結果を実行するが、この場合、プログラムは、任意のオペレーティングシステムを使用することができます。
ご注意ください:操作のファイルで区切りを表すFile.separatorを使用する必要があります。プログラムの開発では、多くの場合、使いやすい、より開発ツールを、サポートするために、Windowsオペレーティングシステムであるため、Windowsの開発環境を使用しますが、プログラムがリリースされたとき、多くの場合、直接のであれば、その後、Linuxや他のオペレーティングシステム上で展開File.separatorを使用しない、プログラムが実行され、問題がある可能性があります。
作成および削除ディレクトリ
ファイルの作成と削除に加えて、Fileクラスに、あなたはまた、ディレクトリを作成および削除することができます。方法)あなたは(削除呼び出す必要がありますディレクトリを削除するには、mkdir()メソッドを呼び出すためのディレクトリの必要性を作成します。作成または呼び出すことができるディレクトリを削除して存在するかどうか()メソッドは、ディレクトリが存在するかどうかを決定します。
現在、削除して作成した場合Cのルートディレクトリの下に設定ディレクトリが存在するかどうかを確認します。次のようにコードは次のとおりです。
public class Test {
public static void main(String[] args) {
String path = "C:/config/"; // 指定目录位置
File f = new File(path); // 创建File对象
if (f.exists()) {
f.delete();
}
f.mkdir(); // 创建目录
}
}
ディレクトリトラバーサル
ディレクトリトラバーサルは、指定されたディレクトリ内のファイルを見つけることができる、またはすべてのファイルのリストを表示します。リストファイルのクラス()メソッドは、次のメソッドは、2つのオーバーロードがあり、ディレクトリトラバーサル機能を提供します。
1.文字列[]リスト()
コールはディレクトリファイルオブジェクトでない場合、すべてのディレクトリ内のファイルとファイルオブジェクトからなるサブディレクトリ名の配列を表す文字列を返すメソッドは、nullが返されます。
プロンプト:配列リスト()メソッドは、ファイルのみを含み、パスが含まれていないの名前を返します。しかし、それは結果の配列内の同じ文字列を保証するものではありません、彼らはアルファベット順に表示されていること、特に、特定の順序で表示されます。
2. String []型のリスト(FilenameFilterフィルタ
) 機能と同じリストの方法()メソッドは、配列が返さことを除いて、フィルタがnullの場合、フィルタに沿ってフィルタの唯一のファイルとディレクトリが含まれ、その後、すべての名前を受け入れます。
Cのルートディレクトリにあるすべてのファイルとディレクトリを、ファイルやディレクトリの名前、種類、サイズが表示されます。コードのリスト()メソッドを使用して、次の通りであります:
public class Test {
public static void main(String[] args) {
File f = new File("C:/"); // 建立File变量,并设定由f变量变数引用
System.out.println("文件名称\t\t文件类型\t\t文件大小");
System.out.println("===================================================");
String fileList[] = f.list(); // 调用不带参数的list()方法
for (int i = 0; i < fileList.length; i++) { // 遍历返回的字符数组
System.out.print(fileList[i] + "\t\t");
System.out.print((new File("C:/", fileList[i])).isFile() ? "文件" + "\t\t" : "文件夹" + "\t\t");
System.out.println((new File("C:/", fileList[i])).length() + "字节");
}
}
}
文字列リスト()メソッドが返すファイル名のみが含まれているので、そのファイルの種類とサイズを得るためには、Fileオブジェクトに変換する必要があり、その後、そのメソッドを呼び出します。動作結果を例に以下に示します。
文件名称 文件类型 文件大小
===================================================
$Recycle.Bin 文件夹 4056字节
Documents and Settings 文件夹 0字节
Download 文件夹 12976326字节
DRIVERS 文件夹 0字节
FibocomLog 文件夹 67842字节
Gateface 文件夹 0字节
GFPageCache 文件夹 0字节
hiberfil.sys 文件 3375026176字节
Intel 文件夹 6782234字节
KuGou 文件夹 0字节
logs 文件夹 0字节
msdia80.dll 文件 904704字节
MSOCache 文件夹 0字节
MyDownloads 文件夹 0字节
MyDrivers 文件夹 946882字节
news.template 文件 417字节
NVIDIA 文件夹 0字节
OneDriveTemp 文件夹 7834345字节
opt 文件夹 0字节
pagefile.sys 文件 644250944字节
PerfLogs 文件夹 0字节
Program Files 文件夹 12288字节
Program Files (x86) 文件夹 8192字节
ProgramData 文件夹 12588字节
QMDownload 文件夹 0字节
Recovery 文件夹 1289字节
swapfile.sys 文件 268435456字节
System Volume Information 文件夹 12288字节
Users 文件夹 4096字节
Windows 文件夹 16784字节
私はいくつかのリスト()メソッドのフィルタパラメータで呼び出す必要があるディレクトリ内のファイルのリストにしたいです。最初のファイルフィルターを作成し、フィルタはjava.io.FilenameFilterインタフェースを実装し、指定されたファイルタイプ()メソッドを受け入れることができなければなりません。
SYS、フィルタおよびBAK TXTファイル形式の実装コードを許可します:
public class ImageFilter implements FilenameFilter {
// 实现 FilenameFilter 接口
@Override
public boolean accept(File dir, String name) {
// 指定允许的文件类型
return name.endsWith(".sys") || name.endsWith(".txt") || name.endsWith(".bak");
}
}
フィルタ名は、フィルタファイルを実装するために、リスト()メソッドに、上記のコードのImageFilterのためにのみ、次の名前を作成しました。
String fileList[] = f.list(new ImageFilter());
次のような結果を通じて、もう一度プログラムを実行します。
文件名称 文件类型 文件大小
===================================================
offline_FtnInfo.txt 文件 236字节
pagefile.sys 文件 84365940字节