新しいファイルに書き込むときにパス全体を自動的に作成する


246

で新しいファイルを書きたいのですがFileWriter。私はそれを次のように使用します:

FileWriter newJsp = new FileWriter("C:\\user\Desktop\dir1\dir2\filename.txt");

現在dir1dir2現在は存在しません。それらがまだない場合は、Javaで自動的に作成する必要があります。実際には、Javaはファイルパス全体を設定する必要があります(まだ存在しない場合)。

どうすればこれを達成できますか?

回答:


431

何かのようなもの:

File file = new File("C:\\user\\Desktop\\dir1\\dir2\\filename.txt");
file.getParentFile().mkdirs();
FileWriter writer = new FileWriter(file);

11
mkdirsだけでなく、なぜgetParentFileなのですか?
sauperl 2016年

異なる兄弟ファイルを使用して同じコードを再発行する場合、以前のフォルダーを上書きしますか?
surajs1n

1
@ surajs1n:ディレクトリがすでに存在する場合、mkdirs何もしません。
Jon Skeet、

3
@sauperl:ファイルがまだ存在しない場合、mkdirs()は指定されたすべてがディレクトリであると想定し、ディレクトリを作成します(テストしただけです)。getParentFile()を使用すると、ファイル自体の作成はFileWriterに任せます。
h4nek

149

Java 1.7以降では、Files.createFileを使用できます。

Path pathToFile = Paths.get("/home/joe/foo/bar/myFile.txt");
Files.createDirectories(pathToFile.getParent());
Files.createFile(pathToFile);

4
相対パスはnullポインタ例外を引き起こす可能性があることに注意してください。Path pathToFile = Paths.get("myFile.txt"); Files.createDirectories(pathToFile.getParent());
Mag 2017年

if(!Files.exists(pathToFile.getParent()))Files.createDirectory(pathToFile.getParent()); //エラーを回避するために、dirがすでに存在するかどうかをテストします
Andre Nel

29

使用File.mkdirs()

File dir = new File("C:\\user\\Desktop\\dir1\\dir2");
dir.mkdirs();
File file = new File(dir, "filename.txt");
FileWriter newJsp = new FileWriter(file);


4

FileUtilsを使用して、これらすべての頭痛の種を処理します。

編集:たとえば、ファイルに書き込むには、以下のコードを使用します。このメソッドは、「親ディレクトリが存在しない場合、チェックして作成します」。

openOutputStream(File file [, boolean append]) 

1
もっと具体的に教えてください。
Jean、

こんにちはジャン、編集。FileUtilsの下には、他にも便利なメソッドがたくさんあります。OIUtilsやFileUtilsなどのApache Commons IOクラスは、Java開発者の生活を楽にします。
kakacii

1
FileUtilsを使用するのが良い方法だと思いますが、これを行うには、openOutputStreamではなくwriteStringToFileを使用する方が簡単だと思います。たとえば、ファイルfile = new File( "C:/user/Desktop/dir1/dir2/filename.txt"); FileUtils.writeStringToFile(file、 "foo bar baz"、true);
ポール2013

ありがとうございます。私のコードをよりきれいにしました。最近のjavadocへのリンク:commons.apache.org/proper/commons-io/javadocs/api-2.5/org/...
ニキルSahu
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.