【问题标题】:Does my Java Virtual Machine think that I'm under unix even when I'm on windows?即使我在 Windows 上,我的 Java 虚拟机是否认为我在 unix 下?
【发布时间】:2013-04-15 08:59:24
【问题描述】:

我对我在 Logcat 中获得的结果感到困惑。 我正在尝试读取文件,但收到 FileNotFoundException。现在我正在硬编码文件所在的 url。

InputStream readMyFile(String fileName){
    File file = new File("C:\\Users\\Alvaro\\workspaceEclipse\\ProyectA\\file.xml");
    //File file = new File("C:" +File.separator +"Users" +File.separator +"Alvaro" +File.separator +"workspaceEclipse" +File.separator +"ProyectA" +File.separator +"file.xml");
    System.out.println("Working Directory = " +
              System.getProperty("user.dir"));
    System.out.println(file.exists());
    System.out.println(file.canRead());
    InputStream in = null;
    try {
        in = new BufferedInputStream(new FileInputStream(file));
        if (in != null) {
            in.close();
        }
    }catch(Exception e){
        System.out.println("Error opening the file. \n" +e);
    }
    return in;
}

我可以看到找不到该文件,因为不知何故,在 url 字符串的开头插入了一个“/”:

/C:\Users\Alvaro\workspaceEclipse\ProyectA\file.xml: open failed: ENOENT (No such file or directory)

问题是,如果我使用 File.separator,输出是:

/C:/Users/Alvaro/workspaceEclipse/ProyectA/file.xml: open failed: ENOENT (No such file or directory)

有人知道会发生什么吗?

其他信息:

  • 工作目录 = /
  • file.exists() 和 file.canRead() 显然返回 false。
  • Windows 7 家庭高级版。
  • Eclipse 版本 Indigo Service Release 2
  • Java 版本 1.6.0_37

【问题讨论】:

  • 你应该使用file:///C:...
  • Android 是 Unix,即使它在 Windows 上的模拟器中运行。
  • 好的。我会考虑到这一点并想办法。令人印象深刻的是,在 10 分钟内,我收到了两个 cmets,一个 -1,另一个用户的答案已经 -1。
  • 如果你看到架构最低层是Linux Kernel

标签: java android windows eclipse android-logcat


【解决方案1】:

我认为问题在于您真的“在 Windows 上”运行。

相反,我怀疑您在 Android 仿真环境中运行。 Android 是为 Linux 设计的,我希望仿真环境中的 Android 运行时库假定文件系统使用 UNIX/Linux 样式的路径名。

赠品是您在 logcat 中看到消息。 Logcat 是一个 Android 主义。它不是 Windows 上的 Java 或 Linux 上的 Java 原生的。


另外需要注意的是,您尝试做的事情(访问 Eclipse 工作区中的文件)在真正的 Android 设备上并不适用。与其弄清楚如何使用 Windows 路径名来访问 Eclipse 工作区,不如弄清楚如何将文件放入 Android 应用程序本身或(模拟的)Android 文件系统。


如果您想确认此诊断,请获取您的代码示例并将其放入一个普通的 Java 应用程序中,然后从命令提示符编译和运行它。

【讨论】:

  • 谢谢,我想你提到了两个关键点。 :) 这种获取文件的方式是从网站下载文件之前的第一步,但是是的,这种获取文件的“快速”方式是错误的。
猜你喜欢
  • 1970-01-01
  • 2013-11-21
  • 1970-01-01
  • 1970-01-01
  • 2014-07-20
  • 1970-01-01
  • 2021-03-14
  • 1970-01-01
  • 2023-04-02
相关资源
最近更新 更多