1

非常に単純なスクリプトであるはずのスクリプトで、非常に苛立たしいエラーが発生しました (Java がスクリプト作成に最適ではないことはわかっていますが、ここにいます)。

とにかく、私は csv ファイルからプリンターの名前を取得しています。次に、その csv ファイルから取得した各プリンターの名前の付いたフォルダーを作成しようとしています。問題は、次のように入力した場合にのみ、プリンターのディレクトリを書き込むことができることです。

(new File("c:\\print\\printername").mkdir()

しかし、私がこれを行うと:

String whatever = "c:\\print\\printername"
(new File(whatever)).mkdir()

ディレクトリは作成されません。私は何が問題なのか困惑しています。問題を追跡するためにコードを数回再構築し、mkdir() と mkdirs() を切り替えるなどのことを試みましたが、それでも何もしませんでした。これが私のコードです

public static void main(String[] args) throws FileNotFoundException{
    Scanner printers = new Scanner(new File("C:/Users/ransom/Desktop/printers.csv"));
    printers.useDelimiter("\n");
    String printerPath = "";

    //new File("C:\\printer\\ISS114-Xerox4150PS").mkdir();

    while(printers.hasNext()){          
        printerPath = "C:\\printer\\"+printers.next();
        if(!(new File(printerPath)).mkdir()){
            System.out.println(printerPath);
        }
    }

}

コメントアウトされている行は、スクリプトが機能する場合の例ですが、ループ内でその行に到達すると、ディレクトリは作成されません。何か案は?

4

2 に答える 2

2

上記の両方の方法 (明示的な String または String 変数を使用) は同じように機能します。発生しているように見える問題は、親ディレクトリが存在しないためです。

つまり、ディレクトリ"C:\\print"が存在しない場合、ディレクトリはmkdir()作成されません"C:\\print\\aSubDir"

mkdirs()必要なすべての親ディレクトリも作成する which を使用してみてください。

この例を参照してください ("C:\\Temp既に存在します):

public static void main(String[] args) throws FileNotFoundException
{
    String path1 = "C:\\Temp\\print\\1";
    String path2 = "C:\\Temp\\print\\2\\2a";

    System.out.println("Attempt 1: " + new File("C:\\Temp\\print\\1\\").mkdir());
    System.out.println("Attempt 2: " + new File(path1).mkdir());
    System.out.println("Attempt 3: " + new File(path1).mkdirs());
    System.out.println("Attempt 4: " + new File(path2).mkdir());
    System.out.println("Attempt 5: " + new File("C:\\Temp\\print\\2\\2a").mkdir());
    System.out.println("Attempt 6: " + new File("C:\\Temp\\print\\2\\2a").mkdirs());
}

次の出力が得られます。

Attempt 1: false
Attempt 2: false
Attempt 3: true
Attempt 4: false
Attempt 5: false
Attempt 6: true

編集(@MadProgrammerに感謝)

上記の例をもう一度実行すると、すべて false が返されるように、ディレクトリが既に存在するという事実が原因である可能性もあります。したがって、使用して作成する前に、ディレクトリが既に存在するかどうかのチェックを追加することもできますFile#exists()

于 2014-01-08T00:09:07.107 に答える
1

それを試してください(スラッシュに注意してください):

String whatever = "c:/print/printername"
(new File(whatever)).mkdir()

それがうまくいったかどうか教えてください。反対票を投じる場合は、理由を教えてください(他の視聴者)。

于 2014-01-08T00:07:03.360 に答える