因为断点续传中要用
所以写了个测试的代码试验一下 问什么得到的文件和原先的文件不一样?
代码如下:
package techtele.temp;import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;public class FileTest {
public static RandomAccessFile getFile(String path) {
RandomAccessFile re = null;
try {
File file = new File(path);
if (!file.exists())
file.createNewFile();
re = new RandomAccessFile(file, "rw");
} catch (IOException e) {
e.printStackTrace();
}
return re;
} public FileTest() { RandomAccessFile randomAccessFile = getFile("c:/2.xls");
FileInputStream orFileStream;
try {
orFileStream = new FileInputStream("c:/1.xls");
BufferedReader receiver = new BufferedReader(new InputStreamReader(
orFileStream));
int b;
int i=0;
while ((b=receiver.read())!=-1) {
randomAccessFile.seek(i);
randomAccessFile.write(b);
i++;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} }
public static void main(String[] args) {
FileTest f = new FileTest();
}
}

解决方案 »

  1.   

    try {
    orFileStream = new FileInputStream("c:/1.xls");
    BufferedReader receiver = new BufferedReader(new InputStreamReader(
    orFileStream));
    int b;
    int i=0;
    int size = orFileStream.available();
    while (i< size) {
    b=receiver.read();
    System.out.println(b);
    randomAccessFile.seek(i);
    randomAccessFile.write(b);
    i++;

    }
    randomAccessFile.close();
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }////////////////////这是因为xls文件最后有一些-1被你忽略了
      

  2.   

    RandomAccessFile是按记录records进行读写的,你这种写法就是一律以int为每个记录单位,如果是这样为什么不直接用InputStream和OutputStream呢,
    另:你说的不同是指什么??中文乱码,还是其他?〉?
      

  3.   

    是因为少读了一些字节因为BufferedReader  read方法是一次读两个字节我刚刚测试了一下
    读一些特殊格式的文件,会出现最后几个字节都是-1的情况按照我上面的写法就不会有问题了!!