Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java读取路径中带有空格的文件_Java_Java Io - Fatal编程技术网

使用Java读取路径中带有空格的文件

使用Java读取路径中带有空格的文件,java,java-io,Java,Java Io,我试图打开文件名中有空格的FileInputStream 例如: String fileName = "This is my file.txt"; String path = "/home/myUsername/folder/"; String filePath = path + filename; f = new BufferedInputStream(new FileInputStream(filePath)); 结果是抛出FileNotFoundException。 我试图将文件路径硬

我试图打开文件名中有空格的FileInputStream

例如:

String fileName = "This is my file.txt";
String path = "/home/myUsername/folder/";

String filePath = path + filename;
f = new BufferedInputStream(new FileInputStream(filePath));
结果是抛出FileNotFoundException。 我试图将文件路径硬编码到
“/home/myUserName/folder/This\\is\\my\\file.txt”
,只是想看看我是否应该转义空白字符,但它似乎不起作用。 对这件事有什么建议吗


编辑:只是为了与所有查看此问题的人在同一页面上…打开名称中没有空格的文件是有效的,但打开名称中有空格的文件失败。权限不是这里的问题,也不是文件夹分隔符。

不,不需要转义空白

如果代码抛出
FileNotFoundException
,则该文件不存在(或者,您可能缺少访问该文件所需的权限)


如果权限正常,并且您认为该文件存在,请确保该文件的名称与您认为的名称相同。特别是,请确保文件名不包含任何不可打印的字符、无意中出现的前导或尾随空格等。为此,
ls-b
可能会有所帮助。

看起来您遇到的问题是文件分隔符,而不是文件名中的空格。你试过使用吗

System.getProperty("file.separator")

而不是路径变量中的“/”?

带有空格的文件名就可以了

这是我的密码

File f = new File("/Windows/F/Programming/Projects/NetBeans/TestApplications/database prop.properties");
        System.out.println(f.exists());
        try
        {
            FileInputStream stream = new FileInputStream(f);
        }
        catch (FileNotFoundException ex)
        {
            System.out.println(ex.getMessage());
        }

f.exists()。只需确保在从外部源(如命令行)传递路径时,路径末尾不包含空格:

File file = new File(path.trim());
若您想要有一个不带空格的路径,您可以将其转换为URI,然后返回到path

try {
    URI u = new URI(path.trim().replaceAll("\\u0020", "%20"));
    File file = new File(u.getPath());
} catch (URISyntaxException ex) {
    Exceptions.printStackTrace(ex);
}

如果路径中没有空格,则文件可能重复,我可以打开它们…因此权限似乎不是问题:(.@user253530:向我们展示列出问题文件的
ls-l
输出。-rw-r--r--1 root root 101 2012-02-03 11:16 add.txt-rw-r--r--1 root 13969 2012-02-02 20:23 CASE 1A.txt每个人都有读取权限…这不是问题…我可以打开add.txt,但无法打开CASE 1A.txt…这是我确定的名称that@user253530:我确信嵌入的空格不是问题所在。请确保文件名不包含任何不可打印的字符、意外的前导或尾随空格等。
ls-b
可能会有所帮助。感谢您向我展示我必须首先使用文件(路径)在将其发送到FileInputStream之前。@user253530:您是否暗示您的原始代码不起作用,并将
filePath
包装到
File()
中使其起作用?!是的……如果我使用FileInputStream(字符串filePath),它就不起作用了……但是如果我先使用File f=新文件(filePath),然后使用FileInputStream(f)不会抛出错误…非常奇怪..这没有意义-FileInputStream(字符串名称)的构造函数
只需创建一个
文件
无论如何-代码是等效的。不要逃避空白,我相信你在unix/linux上就像env一样。如果它不起作用,你就是在做一些其他错误的事情,例如,错报文件名或smth其他