web-dev-qa-db-ja.com

フォルダーを含むファイルを特定のパスに作成する方法は?

WebからZipファイルをダウンロードしています。フォルダーとファイルが含まれます。 ZipInputstreamおよびZipEntryを使用して圧縮解除します。 _Zipentry.getName_は、ファイル名を_htm/css/aaa.htm_として提供します。

だから私は新しいFile(zipentry.getName);を作成しています

しかし、問題は例外をスローすることです:_File not found_。サブフォルダーhtmおよびcssを作成していることがわかりました。

私の質問は、上記のパスを渡すことにより、サブディレクトリを含むファイルを作成する方法ですか?

46
Srinivas

これを使って:

_File targetFile = new File("foo/bar/phleem.css");
File parent = targetFile.getParentFile();
if (!parent.exists() && !parent.mkdirs()) {
    throw new IllegalStateException("Couldn't create dir: " + parent);
}
_

結果を確認せずにfile.getParentFile().mkdirs()だけを実行できますが、操作の戻り値を確認することをお勧めします。したがって、最初に既存のディレクトリをチェックし、次に作成が成功したかどうかをチェックします(まだ存在していない場合)。

参照:

104

Googleの guava ライブラリを使用して、 Files クラスを使用して数行で実行できます。

Files.createParentDirs(file);
Files.touch(file);

https://code.google.com/p/guava-libraries/

12
Andrejs

Zipファイル内のエントリをループするときに、必要に応じてサブディレクトリを作成する必要があります。

ZipFile zipFile = new ZipFile(myZipFile);
Enumeration e = zipFile.entries();
while(e.hasMoreElements()){
    ZipEntry entry = (ZipEntry)e.nextElement();
    File destinationFilePath = new File(entry.getName());
    destinationFilePath.getParentFile().mkdirs();
    if(!entry.isDirectory()){
        //code to uncompress the file 
    }
}
2
dogbane

これは私がそれをする方法です

static void ensureFoldersExist(File folder) {
    if (!folder.exists()) {
        if (!folder.mkdirs()) {
            ensureFoldersExist(folder.getParentFile());
        }
    }
}
1
Gubatron

Fileオブジェクトで.mkdirs()メソッドを使用するファイルを確認します。 http://www.roseindia.net/Java/beginners/Java-create-directory.shtml

 isDirectoryCreated =(new File( "../ path_for_Directory/Directory_Name"))。mkdirs(); 
 if(!isDirectoryCreated)
 {
 //ディレクトリ作成に失敗しました
} 
1
parag.rane