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);
  }
}

这依赖于 Java 7 的新文件 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

以附加模式打开文件..您的代码将覆盖,因为默认值是覆盖,而不是附加。

要追加,您需要将追加参数作为 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 回答