Java FileWriter 类 - java.io.FileNotFoundException: * 没有这样的文件或目录 -Ubuntu
Posted
技术标签:
【中文标题】Java FileWriter 类 - java.io.FileNotFoundException: * 没有这样的文件或目录 -Ubuntu【英文标题】:Java FileWriter class - java.io.FileNotFoundException: * no such file or directory -Ubuntu 【发布时间】:2019-12-24 12:40:54 【问题描述】:我正在使用这种方法在我的项目的子目录中生成一些乌龟文件.ttl
:
public static void write(int id, int depth)
try
FileWriter fw = null;
switch (getName())
case ("KG1"):
fw = new FileWriter("WWW/KG1/" + depth + "/" + id + ".ttl");
break;
case ("KG2"):
fw = new FileWriter("WWW/KG2/" + depth + "/" + id + ".ttl");
// Write something
fw.close();
catch (IOException e)
e.printStackTrace();
但是当我将我的项目放在 Ubuntu 中(它在 Windows 中仍然可以正常工作)的 java 类 FileWriter
中时,我遇到了这个异常:
java.io.FileNotFoundException: /WWW/KG1/2/0.ttl (No such file or directory)
我在两个操作系统上都使用 Eclipse Neon,但 Ubuntu 似乎对此并不满意。
这是我迄今为止尝试过的:
为项目主目录下的所有文件和目录添加写权限
使用绝对路径而不是相对路径,使用System.getProperty("usr.dir")
,并绘制我提供给FileWriter
的所有路径字符串,但它不起作用。
有什么建议吗?
谢谢!
【问题讨论】:
您的工作目录中是否存在所有目录WWW
、KG1
、2
?
可能是因为这个? ***.com/questions/8075373/…
@RealSkeptic:是的,他们确实存在
你确定它们存在大写吗?
@RealSkeptic:是的也验证了这一点,我什至复制粘贴了路径以确保没有拼写错误
【参考方案1】:
我会尝试使用 File.separator 并确保父目录存在。 这是一个示例(可能存在语法问题)。
final String WWW = "WWW";
final String KG1 = "KG1";
final String KG2 = "KG2";
final String extension = ".ttl";
int id = 1;
int depth = 1;
String filePath = "." // current dir
+ File.separator
+ WWW
+ File.separator
+ KG1
+ File.separator
+ depth
+ File.separator
+ id
+ extension;
File file = new File(filePath);
// make sure parent dir exists (else created)
file.getParentFile().mkdirs();
FileWriter writer = new FileWriter(file);
【讨论】:
谢谢!我很想知道这背后的原因? 我一直在这种情况下使用File.separatorChar
(而不是File.pathSeparatorChar
。File.separatorChar 是:系统相关的默认名称分隔符。该字段已初始化包含系统属性 file.separator 值的第一个字符。在 UNIX 系统上,此字段的值是“/”;在 Microsoft Windows 系统上,它是“\\”。
@Betty 这是一个名为绝对路径和相对路径的概念。绝对路径是完整的,但相对路径需要更多信息才能完整。 www/kg1/..
是相对路径(无前缀)。它由 JVM 完成,相对于 user.dir
属性而不是当前工作目录。请查看System.getProperty("user.dir")
而不是usr.dir
的输出。
@The_Cute_Hedgehog:我知道绝对/相对路径。实际上,System.getProperty("user.dir")
输出实际的绝对路径,System.getProperty("usr.dir")
输出null
。我使用后者来获取当前运行的 JVM 目录的绝对值,但没有帮助。【参考方案2】:
您可以使用 Path 和 File 对象让事情变得更轻松。这是一个版本,如果它不存在,可以选择创建想要的目录
Path path = Paths.get("WWW", "KG1", String.valueOf(depth));
try
Files.createDirectories(path);
FileWriter fw = new FileWriter(new File(path.toFile(), id + ".ttl"));
fw.close();
catch (IOException e)
e.printStackTrace();
请注意,我故意跳过switch
以简化答案
【讨论】:
感谢您的回复,效果很好:您知道这是什么原因吗?以上是关于Java FileWriter 类 - java.io.FileNotFoundException: * 没有这样的文件或目录 -Ubuntu的主要内容,如果未能解决你的问题,请参考以下文章
java中的 FileWriter类 和 FileReader类的一些基本用法
Java FileWriter 类 - java.io.FileNotFoundException: * 没有这样的文件或目录 -Ubuntu
JAVA IO流相关代码(字符流:FileWriter类,FileReader类,BufferedReader类,BufferedWriter类)