Определить, когда файл не может быть создан из-за плохих символов в имени - PullRequest
1 голос
/ 07 февраля 2012

Может кто-нибудь сказать мне, как справиться с незаконными именами файлов в Java?Когда я запускаю в Windows следующее:

File badname = new File("C:\\Temp\\a:b");

System.out.println(badname.getAbsolutePath()+" length="+badname.length());

FileWriter w = new FileWriter(badname);
w.write("hello world");
w.close();

System.out.println(badname.getAbsolutePath()+" length="+badname.length());

Вывод показывает, что файл был создан и имеет ожидаемую длину, но в C: \ Temp все, что я вижу, это файл с именем "a" сДлина 0Куда java помещает файл?

Я ищу надежный способ выдать ошибку, когда файл не может быть создан.Я не могу использовать exist () или length () - какие еще есть варианты?

Ответы [ 5 ]

2 голосов
/ 08 февраля 2012

В этом конкретном примере данные записываются в именованный поток . Вы можете увидеть данные, которые вы записали из командной строки, следующим образом:

 more < .\a:b

Для получения информации о допустимых именах файлов смотрите здесь .

Чтобы ответить на ваш конкретный вопрос: существует () должно быть достаточно. Даже в этом случае, в конце концов, данные записываются в указанное место - это просто не то, что вы ожидали! Если вы считаете, что этот случай вызовет проблемы у ваших пользователей, проверьте наличие двоеточия в имени файла.

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

Я бы предложил посмотреть на Регулярные выражения . Они позволяют разбить строку и посмотреть, применимы ли определенные характеристики. Другой метод, который работал бы, это разделить строку на символ [], а затем обработать каждую точку, чтобы увидеть, что в ней, и если это допустимо ... но я думаю, что RegEx будет работать намного лучше.

0 голосов
/ 07 февраля 2012

Вы можете использовать File.renameTo(File dest);.

0 голосов
/ 07 февраля 2012

Вы должны взглянуть на Регулярные выражения и создать шаблон, который будет соответствовать любому недопустимому символу, что-то вроде этого:

String fileName = "...";
Pattern pattern = Pattern.compile("[:;!?]");
Matcher matcher = pattern.match(fileName);

if (matcher.find())
{
    //Do something when the file name has an illegal character.
}

Примечание: я не проверял этот код,но этого должно быть достаточно, чтобы вы встали на правильный путь.Приведенный выше код будет соответствовать любой строке, которая содержит :, ;, `! 'а также '?'.Не стесняйтесь добавлять / удалять по своему усмотрению.

0 голосов
/ 07 февраля 2012

Сначала получите имя файла:

String fileName = fullPath.substring(fullPath.lastIndexOf('\\'), fullPath.length);

Создать массив всех специальных символов, не разрешенных в именах файлов.

для каждого char в массиве, проверьте, содержит ли fileName его. Я думаю, у Java есть встроенный API для этого.

Отметьте this.

Примечание: В этом решении предполагается, что родительский каталог существует

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...