【发布时间】:2013-10-26 02:54:06
【问题描述】:
我正在做一个项目,我必须在其中完成一些文件读写任务。我必须一次从一个文件中读取 8 个字节并对该块执行一些操作,然后将该块写入第二个文件,然后重复循环,直到第一个文件每次都以 8 个字节的块完全读取,然后处理数据应该添加/附加到第二个。但是,在这样做的过程中,我遇到了一些问题。以下是我正在尝试的:
private File readFromFile1(File file1) {
int offset = 0;
long message= 0;
try {
FileInputStream fis = new FileInputStream(file1);
byte[] data = new byte[8];
file2 = new File("file2.txt");
FileOutputStream fos = new FileOutputStream(file2.getAbsolutePath(), true);
DataOutputStream dos = new DataOutputStream(fos);
while(fis.read(data, offset, 8) != -1)
{
message = someOperation(data); // operation according to business logic
dos.writeLong(message);
}
fos.close();
dos.close();
fis.close();
} catch (IOException e) {
System.out.println("Some error occurred while reading from File:" + e);
}
return file2;
}
我没有以这种方式获得所需的输出。任何帮助表示赞赏。
【问题讨论】:
-
您的偏移量永远不会增加,还是在您的 someOperation 方法中完成?
-
您必须检查 fis.read() 的返回值才能知道实际读取的字节数。而且,我没有看到 file2 的定义。就像 Julien 说的那样,没有偏移增量......
-
我假设decryptedFile和file2在哪里一样,你不觉得@CPUTerminator吗?
-
@Julien 是的...虽然 'decryptedFile' 到 'file2' 似乎是一个很大的飞跃
-
将 while 循环更改为
while((readcnt = fis.read(data)) > 0),您将永远不必担心偏移量,并且您将拥有变量 readcnt 来跟踪您已读取的字节数
标签: java file file-io inputstream fileoutputstream