Java createNewFile 不能在本地网络上工作
Posted
技术标签:
【中文标题】Java createNewFile 不能在本地网络上工作【英文标题】:Java createNewFile not working over local network 【发布时间】:2018-02-01 08:27:50 【问题描述】:我有一段简单的代码,它创建了两个目录和两个文件,然后继续用更多文件填充目录。在本地机器 (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());
我已验证所有目录均已正确创建。当然这不可能是权限问题,因为程序继续使用相同的.createNewFile()
在pDir
和dDir
中创建文件。
这里是否有任何明显的错误,或者为什么它可以处理本地机器上的文件而不是 NFS 上的文件?
谢谢
【问题讨论】:
【参考方案1】:你的问题是你使用的文件名:
x = new File(outputDirectory + File.separator + "d_*_1");
Windows 不接受文件名中的星号“*”。
【讨论】:
是的!非常感谢,这让我困惑了好久。你会认为它会给出比 'null' 更具描述性的错误以上是关于Java createNewFile 不能在本地网络上工作的主要内容,如果未能解决你的问题,请参考以下文章
Java 的 createNewFile() - 它还会创建目录吗?
Java的createNewFile() - 它还会创建目录吗?
Java创建文件new file(string 参数)与file.createNewFile()