java 将一个文件写入另一个文件_java 把一个文件写入到另一个文件中

文件的读取与写入一般有三种,按字节写,按字符写,按行写。对于按字符本人不是很了解,对于按字节与按行写了解比较多。

一,对于按字节写一般是定义字节数组,然后通过read方法把字节流写入到字节数组即可。(其实对于字节的操作,在java网络的编程中用得比较多,如果中间牵涉到数据是按字节传输的时候,对于字节操作是需要很细致的,这个时候如何把字节跟字符串互换,然后进行相识的操作在解析数据,这里面有很多问题,写服务器时解决不少,不少心得在以后再写。今天先完成文件夹的读写):

对于按字节写相对而言还是比较简单的,如:

FileInputStream  fs = new FileInputStream(new FIle("test.txt"))

byte[] result = new byte[1024];//长度具体情况具体定义了。很有学问

fs.read(result);这样就可以把所有的内容读入到字节数组result中了。

如果是字符的话,相信也是类似的方法~

二,对于按行读取,今天我需要把一个文件里每六行存取成另一个文件的一行,直到所有的数据读取完。(具体我的应用还有把新生成的文件每一行存储到数据库中去,都是差不多的功能了,不过之后我还需要把字符什么的按一定要求转换为字节,并封装进行转输,这个之间还是有很多问题的--)

至于文件隔行存储,方法如下:(我程序中的方法)

/**

*

*从一个文件每六行读取到另一个文件中。  *

**/

public void readFile(String readfile,String writefile){

try{

FileReader fr = new FileReader(readfile);

FileWriter fw = new FileWriter(writefile);

BufferedReader br = new BufferedReader(fr);

BufferedWriter bw = new BufferedWriter(fw);

int i = 0;//记录行数的标识。

StringBuffer sb = new StringBuffer();

String temp = br.readLine();

//当读取六行,则通过bw写到写文件中。

while(temp != null){

i += 1;

sb.append(temp);

if(i == 6){//如果到六行,则把拼接的一行写到文件中。

bw.write(new String(sb));

bw.newLine();//换行符

bw.flush();//需要急时涮新流的缓冲区,不然写文件时,当缓冲区满就再也写不进去了     i = 0;

sb = new StringBuffer();

}

temp = br.readLine();

}

//如果最后不到六行,且写到末尾,则把所有余下的写到文件中。

if(sb.length() > 0){

bw.write(new String(sb));

bw.newLine();

bw.flush();

bw.close();//关闭方法在涮新以后,

}

br.close();

System.out.println("转写文件完成");

}catch(Exception e){

e.printStackTrace();

}

}

在方法实现的整个过程中并没有什么大的问题,但出现了当写入文件达到16KB时就再也写不进去了,当时被这问题给难住了,在网上查找答案时还有人说写到64KB时不能再写了,我想应该是一样的问题,当有人提出这个问题时,很多人嘲笑,说什么不可能,我还有写几G的文件,其实笑别人的人还是没帮助人解决这个问题,还好有高手提出了是否流没有flush,当我在看到这句回复时,顿时感觉高手就是高手。相信这是经验的原因吧,

所以程序这句很重要:bw.flush();//需要急时涮新流的缓冲区,不然写文件时,当缓冲区满就再也写不进去了

你可能感兴趣的:(java,将一个文件写入另一个文件)