Java createNewFile 无法在本地网络上运行
Java createNewFile not working over local network
我有一段简单的代码可以创建两个目录和两个文件,然后继续用更多文件填充目录。当 运行 文件在本地机器 (Ubuntu) 上时,代码 运行s 是应该的。
然而,我们在 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 的文件?
谢谢
您的问题是您使用的文件名:
x = new File(outputDirectory + File.separator + "d_*_1");
Windows 不接受文件名中的星号“*”。
我有一段简单的代码可以创建两个目录和两个文件,然后继续用更多文件填充目录。当 运行 文件在本地机器 (Ubuntu) 上时,代码 运行s 是应该的。
然而,我们在 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 的文件?
谢谢
您的问题是您使用的文件名:
x = new File(outputDirectory + File.separator + "d_*_1");
Windows 不接受文件名中的星号“*”。