4

我想知道是否有人知道为什么我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;
}
4

1 回答 1

2

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

试试这个

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

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

您可以在这里查看:如何确定字符串是否包含无效的编码字符

于 2013-01-29T21:08:24.503 回答