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)

这也可能是由于目录已经存在,就好像你第二次运行上面的例子一样,all 将返回 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 回答