Java читать файл с пробелами в его пути - PullRequest
7 голосов
/ 03 февраля 2012

Я пытаюсь открыть файлы с FileInputStream, в именах которых есть пробелы.

Например:

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

String filePath = path + filename;
f = new BufferedInputStream(new FileInputStream(filePath));

В результате создается исключение FileNotFoundException. Я попытался жестко закодировать filePath на "/home/myUserName/folder/This\\ is\\ my\\ file.txt", чтобы посмотреть, должен ли я экранировать пробельные символы, и он, похоже, не работает. Любые предложения по этому вопросу?

РЕДАКТИРОВАТЬ: просто чтобы быть на одной странице с каждым, кто просматривает этот вопрос ... открытие файла без пробела в его имени работает, тот, у которого есть пробелы, не удается. Разрешения здесь не проблема и не разделитель папок.

Ответы [ 4 ]

4 голосов
/ 03 февраля 2012

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

Вот мой код

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 всегда без проблем

1 голос
/ 03 февраля 2012

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

System.getProperty("file.separator")

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

0 голосов
/ 17 мая 2017

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

File file = new File(path.trim());

В случае, если вы хотите, чтобы путь без пробелов, вы можетепреобразовать его в URI и затем обратно в путь

try {
    URI u = new URI(path.trim().replaceAll("\\u0020", "%20"));
    File file = new File(u.getPath());
} catch (URISyntaxException ex) {
    Exceptions.printStackTrace(ex);
}
0 голосов
/ 03 февраля 2012

Нет, вам не нужно экранировать пробелы.

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

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

...