我有一段简单的代码创建两个目录和两个文件,然后继续用更多文件填充目录。在本地计算机(Ubuntu)上运行文件时,代码将按预期运行。
但是,我们在Windows服务器上有很多数据,可以通过NFS进行访问,因此这些家伙喜欢cd到服务器上的目录并直接从那里运行代码。这是发生问题的时间。使用.mkdirs()
可以很好地创建两个目录,但是用于创建两个文件的.createNewFile(
会引发IOException
并显示消息No such file or directory
和原因null
。
代码如下:
private File pDir;
private File dDir;
private File x;
private File headerFile;
创建,对打印语句感到抱歉,为此我无法在Intellij中运行调试器
pDir = new File(outputDirectory + File.separator + "p");
dDir = new File(outputDirectory + File.separator + "d");
pDir.mkdirs();
dDir.mkdirs();
x = new File(outputDirectory + File.separator + "d_*_1");
headerFile = new File(outputDirectory + File.separator + "header.Xsam");
System.out.println(pDir.toString());
System.out.println("exists? " + pDir.exists());
System.out.println(dDir.toString());
System.out.println("exists? " + dDir.exists());
/*System.out.println(x.toString());
System.out.println("exists? " + x.exists());
System.out.println(headerFile.toString());
System.out.println("exists? " + headerFile.exists());*/
try {
x.createNewFile();
System.out.println("x created");
headerFile.createNewFile();
System.out.println("header created");
}catch(IOException ex){
System.out.println("error making x or header file: " + ex.getMessage() + " " + ex.getCause());
}
System.out.println(pDir.toString());
System.out.println("exists? " + pDir.exists());
System.out.println(dDir.toString());
System.out.println("exists? " + dDir.exists());
System.out.println(x.toString());
System.out.println("exists? " + x.exists());
System.out.println(headerFile.toString());
System.out.println("exists? " + headerFile.exists());
我已验证所有目录均已正确创建。并且肯定不会是权限问题,因为程序会继续使用相同的
pDir
在dDir
和.createNewFile()
中创建文件。这里是否有任何明显的错误,或者为什么它可以在本地计算机上而不是通过NFS使用文件的原因?
谢谢
最佳答案
您的问题是您使用的文件名:
x = new File(outputDirectory + File.separator + "d_*_1");
Windows在文件名中不接受星号“ *”。
关于java - Java createNewFile无法在本地网络上工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48558294/