【问题标题】:Java File can't open certain filesJava File 无法打开某些文件
【发布时间】:2012-03-26 14:29:45
【问题描述】:

我正在尝试使用以下方式从 Java 中打开文件:

java.awt.Desktop.getDesktop().open(new File("c:\\coolfile.txt");

当然,在大多数情况下,这一切都很好。

但是!

当我有一个带有 unicode 字符 u3000 的文件时,我无法打开它!即使文件存在。

例如:

java.awt.Desktop.getDesktop().open(new File("c:\\coolfile\u3000withweirdname.txt");

我得到一个异常,即使文件存在

[java] java.io.IOException: Failed to open file:/E:/_prog/test%E3%80%80.txt. Error message: The system cannot find the path specified.

请帮助我,我几乎尝试了所有方法。这让我发疯:/

编辑:

提供更多信息:

我可以轻松地从 Java 中创建具有此名称的文件。

好像和空格有关

我不知道它是否适用于其他角色;我还没有找到。当然,如果有 1 个,那么很容易有 100 个。

我很确定我无法从文件中读取或从 Java 中写入,但我还没有测试过,因为这不是我主要关心的问题。

【问题讨论】:

  • 那是剪切和粘贴吗?即您的文件名字符串中是否真的有单个 '\' 字符?
  • 你需要把“\”加倍,比如 java.awt.Desktop.getDesktop().open(new File("c:\\coolfile\\u3000withweirdname.txt");
  • \u3000 是如何写 unicode char u3000。至少我是这么认为的
  • @user1258312 给别人一个SSCCE来帮助你,并说明你都尝试了什么
  • 1) 进行一些更改以进行调试! File f = new File("c:\\coolfile\u3000withweirdname.txt"); System.out.println("Exists: " + f.exists() ); //is it real path? 2) 为了尽快获得更好的帮助,请发布SSCCE。请注意,这是前面引用的术语在 Google 上的热门话题,请不要指望人们会向您提供信息。 3) 引用的代码不会编译,所以如果不是你自己的,请不要再浪费我们的时间了。

标签: java windows file unicode io


【解决方案1】:

据我所知 \u3000 是表意空格字符。为了测试您的代码,我创建了一个名为 CompanyAlt+3000Address 的文件。

注意:当您按下 Alt+3000 时,windows 将创建一个表意空格字符。然后我将文件名复制到我的 java 程序中,它对我有用。

Desktop.getDesktop().open(new File("C:\\Users\\Chandru\\Desktop\\Company╕Address.txt")); 

【讨论】:

  • 我的窗口可能有问题。 Alt+3000 给我 ©
  • 如果我复制你的 ╕ 我得到“java.lang.IllegalArgumentException:文件:c:\tstâ••.txt 不存在。”当试图打开 c:\test .txt
  • ╕ 它应该很好用,即使我使用的是 Windows XP。即使在输入评论时,我也按下了 Alt+3000,它给了我╕符号。
【解决方案2】:
java.awt.Desktop.getDesktop().open(new File("c:\\coolfile\u3000withweirdname.txt");

那不编译。显然这不是你的真实代码。

[java] java.io.IOException: 无法打开 文件:/E:/_prog/test%E3%80%80.txt

而且有证据。显然,您将 URL 传递给新的FileInputStream()。它不需要 URL 字符串,它需要一个文件名。

【讨论】:

  • “很明显,您将 URL 传递给了 new FileInputStream()”,这是错误的。我通过在文件夹上调用 getFiles() 获得了文件路径
  • @user1258312 未经证实。向我们展示代码。如果不是 URL,file:// 和 %-escapes 是从哪里来的?
  • 我不知道我认为它会在格式化异常以显示或其他内容时出现。我现在意识到我应该做一个可编译的例子。我没有发布这个项目的原因是它太大了,只会让讨论变得混乱。
  • 好的,我现在发布了一个修复程序。我可能在其他地方犯了一些愚蠢的错误,但相信我,我没有输入 URL,我输入了正确的文件名。
【解决方案3】:

好的,我想我实际上找到了一种解决我的问题的方法,我在这里发布它以帮助任何可能有类似问题的人。

此修复仅适用于 Windows(我认为是 XP 及更高版本)但我什至不知道此问题是否存在于其他操作系统中。即使它做了类似的修复也应该是可能的。

我正在使用以下代码成功打开包含该字符的文件:

进程 p = new ProcessBuilder("cmd", "/c start \"\" \"E:\_prog\test\u3000.txt\"").start();

打开文件'E:_prog\testu3000.txt'

【讨论】:

  • 哦,顺便说一句,感谢 muCommander,我从他们的程序中偷走了修复程序
猜你喜欢
  • 2019-03-08
  • 2020-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-03
  • 1970-01-01
  • 2012-05-26
  • 2014-08-19
相关资源
最近更新 更多