1

これが私のソースコードです。読み取り部分は取得しましたが、書き込み部分には取得していない単純なロジックが必要です。現在のロジックでは、データが上書きされ、書き込みファイルの読み取りデータの最後のブロックを常に確認できます。

import java.io.File;
import java.io.FileInputStream;
java.io.FileNotFoundException;
java.io.FileOutputStream;
import java.io.IOException;
public class LoadTest 
 {  
public void readFiles(File file) throws FileNotFoundException
       {
        int fsize = (int) file.length();
        int part = (fsize/4)+(fsize%4);
        byte[] block = new byte[part]; 
        FileInputStream fin = new FileInputStream(file);
        try
        {
            int val=-1;
            do
            {
                int bytesread =0;
                while(bytesread<part)
                    {
                        val = fin.read(block, bytesread, part-bytesread);
                        if (val<0)
                            break;
                        bytesread += val;

                    }
                writeFiles(block,bytesread);                            
            }
            while(val>=0);
            fin.close();
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }

    }
public void writeFiles(byte[] block, int len) throws IOException
{
    int byteswritten = 0;
    FileOutputStream fout = new FileOutputStream("input.csv");
    fout.write(block, byteswritten, len+byteswritten);
    byteswritten +=len;
    fout.close();
}


public static void main(String[] args) throws FileNotFoundException
{  
    LoadTest testobj = new LoadTest();
    String folder = "/Users/NiranjanSubramanian/Desktop/TestFiles";
    File dir = new File(folder);
    File[] files = dir.listFiles();
    System.out.println("Started");
    for( File entry: files)
    {  
        testobj.readFiles(entry);

    }
    System.out.println("Ended");

}

}

4

4 に答える 4

1

簡単な方法で問題を解決する方法については、私のコメントを参照してください。しかし、私はあなたにあなたが求めていることをするための簡単な代替案を提案させてください。

final Path dir = Paths.get("/Users/NiranjanSubramanian/Desktop/TestFiles");
try (final OutputStream out = Files.newOutputStream(Paths.get("input.csv"))) {
  for (final Path file : Files.newDirectoryStream(dir)) {
    Files.copy(file, out);
  }
}

これはJava7の新しいファイルAPIに依存していますが、(少なくとも私の意見では)はるかにクリーンなソリューションです。

于 2012-09-15T18:21:33.333 に答える
0

あなたのために、あるいはNIOのためにそれを処理するいくつかのライブラリがありますが、それを行う最も簡単な方法は次のとおりです。

int read = 0;
byte[] buff = new byte[1024];
FileInputStream fis = new FileInputStream(yourInputFile);
FileOutputStream fos = new FileOutputStream(yourOutputFile);

while((read = fis.read(buff)) >= 0){
    fos.write(buff, 0, read);
}
fos.flush();
fos.close();
fis.close();
于 2012-09-15T18:15:55.563 に答える
0

追加モードでファイルを開きます。デフォルトは追加ではなく上書きであるため、コードは上書きされます。

追加するには、appendパラメーターをtrueとして渡す必要があります。変化する

FileOutputStream fout = new FileOutputStream("input.csv");

FileOutputStream fout = new FileOutputStream("input.csv", true);
于 2012-09-15T18:16:39.787 に答える
0

Javaでストリームをコピーする方法:

byte[] buffer = new byte[8192]; // or whatever you like really
int count;
while ((count = in.read(buffer)) > 0)
{
  out.write(buffer, 0, count);
}

書き込みを開始する前にメモリ内の入力全体を必要としないため、時間とスペースの両方を節約できることに注意してください。可能性のある最終的な読み取りを含む部分的な読み取りの処理は非常に簡単です。

于 2012-09-15T18:17:00.817 に答える