【问题标题】:Creating a file from a file path that can be opened in Linux从可以在 Linux 中打开的文件路径创建文件
【发布时间】:2015-09-18 05:18:46
【问题描述】:

我正在使用一个扩展 TransferHandler 类的类来获取被拖放到 gui 中的文件的路径。现在我需要采用该路径并将其转换为文件对象,以便我可以使用已经编写的 opener 方法打开它。我尝试将路径放在这样的文件对象中:

final File file = new File(filePath);

但它不起作用,因为我在 Linux 中运行应用程序,所以我需要对文件路径做一些特殊的事情吗?该应用程序需要在 Linux 和 Windows 中都可运行,是否有一种适用于两者的方法?如果不是,我将如何分别为 Linux 和 Windows 做呢?

错误信息也是这样的:

错误 [Thread-4] 09:07:45 01/07/15: 未能打开 java.io.FileNotFoundException: home/ur/Desktop/out.txt (无此文件或目录) 在 java.io.FileInputStream.open(本机方法) 在 java.io.FileInputStream.(FileInputStream.java:140) 在 java.io.FileReader.(FileReader.java:72) 在 com.ur.log.reader.FileSelectionBinder.openFile(FileSelectionBinder.java:208) 在 com.ur.log.reader.FileSelectionBinder.loadFile(FileSelectionBinder.java:189) 在 com.ur.log.reader.FileSelectionBinder$DragAndDropDataTransfer$1.run(FileSelectionBinder.java:125)

【问题讨论】:

  • 你从哪里运行它?你试过在home前面加斜线吗?
  • 不应该更像/home/ur/Desktop/out.txt吗?否则,您将尝试查找与执行上下文相关的文件
  • 将文件路径更改为 /home/ur/Desktop/out.txt
  • 我已经尝试过更改它,所以在家前面有一个斜线,它没有任何区别

标签: java linux windows file file-transfer


【解决方案1】:

所以我觉得很傻。每次导入时,文件路径的末尾都只有一个空格。我曾尝试输入一个修剪语句,但后来我是一个愚蠢的愚蠢头,没有设置 filePath = file.Path.trim()。麻烦各位了!

【讨论】:

    【解决方案2】:

    没有什么特定于 Linux 的。

    Java 是 平台无关 语言,没有特殊情况 必填。

    编辑:我完全误解了它。你检查文件权限了吗?谁是文件的所有者等?

    请执行/检查以下内容:

    1. 检查文件访问权限
    2. 始终使用绝对路径(前面带有“/”)
    3. 对于主目录,尝试使用System.getProperty("user.home") like -

    .

    File userHomeDir = new File(System.getProperty("user.home")); 
    
    File fileToRead = new File(userHomeDir , "Desktop/out.txt");
    
    1. 通过if(fileToRead.exists())处理文件访问

    以上应该可以给你一个明确的解决方案。否则,您可能会看多一些东西,我不确定。

    【讨论】:

    • 我没有尝试创建新文件,该文件已经在我的桌面上,我只想使用文件路径访问它
    • "-rw-rw-r-- 1 ur ur 16 Jun 29 03:50 out.txt" 和 "-rw-rw-r-- 1 ur ur 0 Jul 1 10:21 检查。文本文件”。我是这个 comp 的唯一用户,应该是这两个文件的所有者,我可以通过代码中的不同方法访问它们,所以我认为访问限制不是问题。
    • 既然您提到您可以通过其他方法打开文件,我不确定真正的问题是什么。我在上述答案中更新了一些更改。请检查。
    【解决方案3】:
    1. 检查该路径下是否已存在文件filePath

    2. /home/ur/Desktop/out.txt 应该类似于 Linux 中的路径,以 / 开头,以防您的路径是绝对路径。

    3. 对于Java,每个平台都是一样的,你不必担心Linux/Windows(除了给出文件路径)。不过,所有方法都应该在所有平台上都能正常工作。

    4. 您可以使用file.exists(),它会提供布尔返回值来满足您的条件。 true 如果文件存在,false 否则。

    【讨论】:

    • 我刚刚在 Linux 命令终端中使用了与我试图在我的程序中使用的文件路径完全相同的文件路径上的 cat 函数,它打开了,但我什至无法获取我的程序说它存在...
    • 关于您提供的例外情况,我只能说您的文件不存在。否则您也可以检查权限。尝试提供您的完整代码,然后我可以深入了解它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    相关资源
    最近更新 更多