1. Java / Говнокод #6976

    +146

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    File tarFile = new File(UUID.randomUUID() + ".tar");
        tarFile.createNewFile();
        FileOutputStream tarFileOutputStream = new FileOutputStream(tarFile.getAbsolutePath());
        TarArchiveOutputStream   archiveOutputStream = new TarArchiveOutputStream(tarFileOutputStream);
         
        String entryName = "пример.txt";
         
        File fileToPack = new File("C:\\пример.txt");
        InputStream in = new FileInputStream(fileToPack);
         
        //создаем запись в архиве с русским названием
        TarArchiveEntry entry = new TarArchiveEntry(entryName);
        entry.setSize(in.available());
        archiveOutputStream.putArchiveEntry(entry);
         
        while (in.available() > 10 * 1024 * 1024) {
                    byte b[] = new byte[10 * 1024 * 1024];
                    in.read(b);
                    archiveOutputStream.write(b, 0, b.length);
            }
        byte b[] = new byte[in.available()];
        in.read(b);
        archiveOutputStream.write(b, 0, b.length);
        in.close();
         
        archiveOutputStream.flush();
        archiveOutputStream.closeArchiveEntry();
        archiveOutputStream.flush();
        archiveOutputStream.close();

    найдено в сети.

    Запостил: Lure Of Chaos, 16 Июня 2011

    Комментарии (20) RSS

    • Последние четыре строчки немного напрягают. А в общем — бывает намного хуже.
      Ответить
    • offset постоянно 0. забавно наверное архивируются файлы больше 10мб
      Ответить
      • ну не в нем, по-моему, дело. Тут почему-то вообще чанками по 10мб макс. читается...
        А в том, что нужно смотреть не на in.available(), а снимать показатели с in.read(b) - потому как написано в доке
        http://download.oracle.com/javase/1.4.2/docs/api/java/io/InputStream.html#read%28byte[]%29
        что возвращается кол-во прочитанных байт, или -1 по достижению конца.
        Ответить
    • Если исключение, то файл не закрыт, ммм...
      Ответить
      • само закроется.....
        Ответить
        • только вот неизвестно когда
          Ответить
          • когда JVM соберется умирать
            Ответить
            • Что-то джава все больше загибается... Скоро совсем умрёт (похоже уже собралась).
              Ответить
      • короче стандартный быдловысер с кучей ошибок, харкодными путями, мейджик намберами и неуверенностью автора
        > archiveOutputStream.flush();
        archiveOutputStream.closeArchiveEntry();
        > archiveOutputStream.flush();
        Ответить
    • Вот не надо всякую гадость, найденную в сети, тащить на говнокод.
      Ответить

    Добавить комментарий