Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > OutputStreamWriter и размер файла.


Автор: devmstr 15.2.2007, 10:14
Мне нужно слить несколько бинарных файлов в один.
Я хочу сделать так:
Код

private boolean MergeFiles(String[] aszStr)
    {
        final int iBuffLen = 128;           // Buffer length
        char buff[] = new char[iBuffLen];   // Buffer
        int  iOffset = 0;                   // Offset position in reading files
        int  iLen;                          // Current length of merged file
        int iNum;                           // The character read
        try
        {
            OutputStreamWriter FMain = new OutputStreamWriter(new FileOutputStream(aszStr[0], true));
            for (int it = 1; it < aszStr.length; it++)
            {
                InputStreamReader in = new InputStreamReader(new FileInputStream(aszStr[it]));
                iLen = FMain.available();
                do
                {
                    iNum = in.read(buff, iOffset, iBuffLen - 1);
                    iOffset += iNum;
                    
                    FMain.write(buff, iLen, iNum);
                    iLen += iNum;
                }
                while (in.ready());
                in.close();
            }
            FMain.flush();
            FMain.close();
        }
        catch(IOException ioe)
        {
            System.err.println("Sorry, but Input/Output Exception was appead during program working");
            return false;
        }
        return true;
    }


Тоесть читаю часть файла в буфер и этот буфер сливаю. Проблема в том что я не знаю как получить первоначальный размер файла.
Код

FMain.available();

не с той оперы. А какой сдесь метод нужно использовать или у меня в корне неправильный подход к данной проблеме?

Автор: LSD 15.2.2007, 12:27
1. Для бинарных файлов надо использовать FileInputStream/FileOutputStream
2.
Код
  public static void mergeFiles(File dest, File[] sourrce) throws IOException
  {
    FileOutputStream out = new FileOutputStream(dest);
    byte[] buffer = new byte[64 * 1024];
    int read;
    for(File file : sourrce)
    {
      FileInputStream in = new FileInputStream(file);
      while((read = in.read(buffer)) != -1)
        out.write(buffer, 0, read);
      in.close();
    }
    out.close();
  }

Автор: devmstr 19.2.2007, 11:54
LSD
Огромное Вам спасибо! Пример мне очень помог!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)