Файл чтения Java с пробелами в пути

Я пытаюсь открыть файлы с 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" просто посмотреть, должен ли я избегать пробелов, и это, похоже, не сработало. Есть предложения по этому вопросу?

EDIT: просто быть на одной странице со всеми, кто просматривает этот вопрос...открытие файла без пробелов в его имени работает тот, у которого есть пробелы, терпит неудачу. Разрешения здесь не проблема, ни разделитель папок.

4 ответов


имя файла с пробелом работает просто отлично

вот мой код

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() возвращает true всегда без каких либо проблем


похоже, у вас проблема скорее с разделителем файлов, чем с пробелами в именах файлов. Вы пробовали использовать

System.getProperty("file.separator")

вместо вашего ' / ' в переменной path?


нет, вам не нужно избегать пробелов.

Если код выдает FileNotFoundException, то файл не существует (или, возможно, у вас нет необходимых разрешений для доступа к нему).

Если разрешения в порядке, и вы думаете, что файл существует, убедитесь, что он называется так, как вы думаете, что он называется. В частности, убедитесь, что имя файла не содержит непечатаемые символы, случайного начальные и конечные пробельные символы и т. д. За это,ls -b может быть полезный.


обычно пробелы в пути не должны иметь значения. Просто убедитесь, что при передаче пути из внешнего источника (например, из командной строки) он не содержит пробелов в конце:

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);
}