LINUX.ORG.RU

Java. Создание папок по списку из txt-файла

 


0

1

Я уже всю голову сломал. Писал по-разному, но почему то из всего списка создаётся только два (всегда одни и те же StringBufferInputStream и Writer) каталога, а остальные «создать не удалось». Почему так?

        ArrayList<String> list = new ArrayList();

        //Читаем файл
        try {
            FileInputStream fstream = new FileInputStream("D:\\Dropbox\\dev.java.docs\\2.com.oracle.docs.java.io\\Class\\list.txt");
            BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
            String strLine;

            while ((strLine = br.readLine()) != null) {
                list.add(strLine); //добавляем в список содержимое текстового файла
            }
        } catch (IOException e) {
            System.out.println("Ошибка");
        }

        //Создаём каталог
        for (String name : list) {
            String DIR1 = "D:\\Dropbox\\dev.java.docs\\2.com.oracle.docs.java.io\\Class\\" + name;
            File dir1 = new File(DIR1);

            if (!dir1.exists()) {
                if (dir1.mkdir()) {
                    System.out.println("Каталог " + dir1.getAbsolutePath() + " успешно создан.");
                } else {
                    System.out.println("Каталог " + dir1.getAbsolutePath() + " создать не удалось.");
                }
            } else {
                System.out.println("Каталог " + dir1.getAbsolutePath() + " уже существует.");
            }
        }


Может быть там недопустимое имя файла или вложенные каталоги? Вообще java.io.File это старое API, с 7 Java появилось новое более адекватное API через java.nio.Path, советую его использовать, оно будет кидать нормальную ошибку, а не возвращать false.

Legioner ★★★★★
()

Почему так?

Потому то переменные в UPPERCASE.

Если серьезно то у меня твой код работает, проблема на твоей стороне, — в Винде.

urxvt ★★★★★
()

Напиши содержимое list.txt

tyamur ★★
()

создаётся только два

Два первых? Какие два? И почитай про File.separator

Deleted
()
Ответ на: комментарий от Serg_HIS

Неправильный совет. Лучше использовать константу File.separator, а ещё лучше конструкторы new File(dir,file) или Path.get(dir,file).

BattleCoder ★★★★★
()

и как сказали ранее, универсальнее mkdirs

Serg_HIS
()
Ответ на: комментарий от Serg_HIS

более адекватное API через java.nio

как раз уже начал читать про нио

Попробуй mkdirs()

без изменений

переменные в UPPERCASE

взял кусок кода из примера. не заморачивался по конвенции. странно, почему именно два каталога создаются и одни и те же всегда

Напиши содержимое list.txt

тупо список всех классов java.io из джавадоков: BufferedInputStream BufferedOutputStream ... StreamTokenizer StringBufferInputStream StringReader StringWriter Writer

замени «\\» на «/»

не помогло

doonay
() автор топика
Ответ на: комментарий от doonay
      } catch (IOException e) {
            System.out.println("Ошибка");
        }

Вот это позорище уберите... замените хотя бы на e.printStackTrace или throw new RuntimeException(e). Тогда будет понятно, в чём «ошибка».

BattleCoder ★★★★★
()
Последнее исправление: BattleCoder (всего исправлений: 1)
Ответ на: комментарий от Serg_HIS
...
Каталог D:\Dropbox\dev.java.docs\2.com.oracle.docs.java.io\Class\StreamTokenizer	 создать не удалось.
Каталог D:\Dropbox\dev.java.docs\2.com.oracle.docs.java.io\Class\StringBufferInputStream уже существует.
Каталог D:\Dropbox\dev.java.docs\2.com.oracle.docs.java.io\Class\StringReader	 создать не удалось.
Каталог D:\Dropbox\dev.java.docs\2.com.oracle.docs.java.io\Class\StringWriter	 создать не удалось.
Каталог D:\Dropbox\dev.java.docs\2.com.oracle.docs.java.io\Class\Writer уже существует.
doonay
() автор топика
Ответ на: комментарий от Serg_HIS

только не File.pathSeparator (который : или ; в зависимости от платформы) а File.separator (который / или \\)

anonymous
()
Ответ на: комментарий от hippi90

вчера остаток вечера извращался с обрезанием табов. трим то оно трим, да не просто трим, а вот так только заработало:

strLine = strLine.replace("\t", "").trim();

doonay
() автор топика
Ответ на: комментарий от anonymous

да, но так я не пойму, как работает класс File в джаве

doonay
() автор топика
Ответ на: комментарий от doonay

Объяснил бы более чётко откуда берётся файл со списком и что требуется в итоге - может рассусолили бы тебе тему подробнее.

Serg_HIS
()
Ответ на: комментарий от anonymous

Считаю что лучше парсить на допустимые символы.

Непечатные просто удалять, а пробелы и т.п. вообще в общем случае лучше заменять на подчёркивания.

Serg_HIS
()
Ответ на: комментарий от dzidzitop

Ну вот у топикстартера не работает и вызывает проблемы. Я считаю, что возвращать false в случае ошибки это полный маразм. Помимо этого java.nio.Path легко мокается и тестируется без реальных файлов в отличие от java.io.File.

Legioner ★★★★★
()
Ответ на: комментарий от Serg_HIS

с такой командой любые символы прокатывают, хоть /, хоть \0, если мы говорим о линуксе. почему жабка брыкается на табуляцию, я хз, даже в винде \t не является недопустимым символом. в документации к жабке про допустимость символов ничего не сказано.

пробелы и т.п. вообще в общем случае лучше заменять на подчёркивания

советы жабиста

anonymous
()
Ответ на: комментарий от Legioner

у автора табуляция в именах, а не проблемы с java.io.File. Ну или ещё какая-то хрень вдобавок.

А с претензиями к дизайну java.io.File согласен.

dzidzitop ★★
()
Последнее исправление: dzidzitop (всего исправлений: 1)
Ответ на: комментарий от dzidzitop

у автора табуляция в именах

У автора не создаётся каталог из-за недопустимого символа в имени файла. И если бы ему написало

java.nio.file.InvalidPathException: Illegal char <	> at index 4: test	

А не false, был бы большой шанс, что этой темы не было бы на форуме. Это и есть проблема.

Legioner ★★★★★
()
Последнее исправление: Legioner (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.