12

このディレクトリ内に新しいディレクトリとファイルを作成しようとしています。どこが間違っているのか誰にでも教えてもらえますか?

Windows システムを使用しており、.javaファイルが存在するフォルダーにディレクトリが存在するようにします。

import java.io.*;
class  PS_Task1 {
    public static void main(String[] args) {
        try {
            File file = new File("Library\\test.txt");
            file.mkdir();
            file.createNewFile();
        }
        catch(Exception e) {
            System.out.println("ecception");
        }
    }
}
4

2 に答える 2

32

基本的に何が起こっているかというとLibrary\test.txt、 という名前のディレクトリを作成してから、同じ名前の新しいファイルを作成しようとしていますが、これは明らかにうまくいきません。

だから、代わりに...

File file = new File("Library\\test.txt");
file.mkdir();
file.createNewFile();

試す...

File file = new File("Library\\test.txt");
file.getParentFile().mkdir();
file.createNewFile();

追加

mkdir失敗した場合、実際にはいかなる種類の例外もスローしません。これはかなり面倒なので、代わりに、もっと似たようなことをします...

File file = new File("Library\\test.txt");
if (file.getParentFile().mkdir()) {
    file.createNewFile();
} else {
    throw new IOException("Failed to create directory " + file.getParent());
}

本当の問題が何であるかを知ったので...

追加

ディレクトリの作成(このコンテキストでは)は、プログラムを実行した場所になります...

たとえば、 からプログラムを実行すると、このディレクトリ (つまり ) にディレクトリが作成されC:\MyAwesomJavaProjects\FileTestます。ファイルと同じ場所に作成することは、アプリケーションが後で実際に Jar にバンドルされる可能性があるため、一般的には良い考えではありません。LibraryC:\MyAwesomJavaProjects\FileTest\Library.java

于 2013-09-05T04:56:14.267 に答える
4

プロジェクト内に新しいディレクトリを作成し、ファイルを作成してから書き込むには、次のようにします。

public static void main(String[] args) {
    //System.getProperty returns absolute path
    File f = new File(System.getProperty("user.dir")+"/folder/file.txt");
    if(!f.getParentFile().exists()){
        f.getParentFile().mkdirs();
    }
    //Remove if clause if you want to overwrite file
    if(!f.exists()){
        try {
            f.createNewFile();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    try {
        //dir will change directory and specifies file name for writer
        File dir = new File(f.getParentFile(), f.getName());
        PrintWriter writer = new PrintWriter(dir);
        writer.print("writing anything...");
        writer.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } 

}
于 2016-08-28T14:59:41.553 に答える