【问题标题】:FileNotFoundException being thrown while file is present. File name might contain special characters文件存在时抛出 FileNotFoundException。文件名可能包含特殊字符
【发布时间】:2013-01-29 20:55:24
【问题描述】:

我想知道是否有人知道为什么我在尝试查找我知道目录中存在的文件时会收到java.io.FileNotFoundException

我认为以下内容与它有关,如果我是正确的或者是否还有其他问题,请告诉我:

  1. 我将 JVM 从 1.7 降级到 1.6
  2. 文件名包含两个问号,所以文件名为filename_?)?.data

当我使用 JVM 1.7 时,程序能够找到并打开它。但是,在降级到 1.6 后,它似乎找不到这个特定文件。所以我在想也许 JVM 1.6 无法读取带有问号的文件。

另外,我进行了两次/三次检查,文件确实存在于我的程序正在查找的目录中(它也能够在其中找到其他文件)。

下面是我的代码:

public Object readFromFile(String fileName) {
    // Check for null
    if (fileName == null || fileName.equals("")) return null;

    Object obj = null;
    ObjectInputStream input = null;

    // Open file into (input)
    try {
        input = new ObjectInputStream(new FileInputStream(fileName + ".data"));
    } catch (IOException e) {
        e.printStackTrace();
    }

    // Read content of file into (obj)
    try {
        obj = input.readObject();
        input.close();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return obj;
}

【问题讨论】:

  • 您使用什么 API 来“查找文件”?如果没有一些代码,我们只能猜测出了什么问题。请阅读FAQHow to Ask,了解编写好的 SO 问题的技巧。
  • 对不起。忘记添加代码了。我已经更新了我的问题。
  • 您确定文件路径包含在变量fileName 中吗?尝试显示这个变量的值,看看它包含什么,看看它是否引用了实际的文件位置。
  • 我知道函数和fileName 可以工作,因为我的程序会从目录中提取其他文件以及其他各种fileNames
  • 如需尽快获得更好的帮助,请发帖SSCCE

标签: java jvm filenotfoundexception


【解决方案1】:

您可能需要在使用特殊字符时对文件名进行编码

试试这个

String fileNameNew= java.net.URLEncoder.encode(fileName);
if (fileNameNew == null || fileNameNew.equals("")) return null;

Object obj = null;
ObjectInputStream input = null;
...

您可以在这里查看:How to determine if a String contains invalid encoded characters

【讨论】:

  • 谢谢。看起来就像那次旅行。我刚刚将URLEncoder.encode 添加到我的readFromFilewriteToFile 函数中,它就可以工作了。
  • 我无法想象为什么这会起作用,尽管我看到 OP 认为它会起作用。文件系统不使用 URL 形式编码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-02
  • 2022-11-10
相关资源
最近更新 更多