Создать новое имя файла, используя переменные в имени - PullRequest
0 голосов
/ 12 марта 2012

Попытка создать файл в определенном каталоге, который использует переменную в своем имени. Тем не менее, я сохраняю get и IOException в следующих строках.

File dir = new File("logs/" + s);
dir.mkdirs();
File permfile = new File(dir, stamp + ".txt");
permfile.createNewFile();
boolean exist = permfile.createNewFile();

Я ценю ваше руководство. Я был в эти 12 часов сегодня, как только я смогу написать файлы, я могу пойти домой! :)

Ответы [ 3 ]

0 голосов
/ 12 марта 2012

Одной возможной проблемой, которую я вижу, является использование буквального слеша forward в качестве разделителя пути, когда Windows использует слэш back . Ваша система может интерпретировать косую черту как часть имени, а не как разделитель, а в Windows косая черта - это недопустимый символ для имени файла .

Чтобы полностью избежать этой проблемы, я бы позволил java API отсортировать разделитель, используя соответствующий конструктор new File(String parent, String child) для вашего dir-файла (вместо того, чтобы создавать собственный путь), то есть:

File dir = new File("logs", s);

Другая проблема заключается в том, что stamp может содержать символы, которые являются недопустимыми для имен файлов в вашей файловой системе.

0 голосов
/ 08 октября 2017

Я бы использовал NIO API для такой задачи.

Path dir = Paths.get("logs", s);
Files.createDirectories(dir);
Path permfile = dir.resolve(stamp + ".txt");
boolean exist = true;
if(!permfile.toFile().exists()) {
    Files.createFile(permfile);
    exist = false;
}
0 голосов
/ 12 марта 2012

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

            try{
            String s = "foldername";
            String stamp = "filename";
            File dir = new File("logs/" + s);
            dir.mkdirs();
            File permfile = new File(dir, stamp + ".txt");
            permfile.createNewFile();
            }
            catch(Exception k)
            { System.out.println("Oops");}

Может быть, ошибка в другом месте?

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