利用字节流字符流操作数据读写

字节流操作数据读写

 

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

 

/**

 *利用流来拷贝文件

 * @author ALWZ

 *

 */

public class CopyByteStream {

 public static void main(String[] args) {

try {

FileInputStream fiStream=new FileInputStream("ani.gif");//将一个动态图片读入字节流

FileOutputStream fos =new FileOutputStream("ani_new.gif");//定一个输出流,输出新的拷贝图片

 

byte input[] =new byte[50];

while (fiStream.read(input)!=-1) {//如果读取的数据不是最后一个就将读的数据放入到input

fos.write(input);//放入数据

 

}

 

fiStream.close();

fos.close();

 

System.out.println("CopyByteStream.main()");

//运行之后刷新,就会看到一个新的ani_new.gif文件

 

 

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

 

}

}

 

 

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

 

/**

 *利用缓冲区实现数据的复制

 * @author ALWZ

 *

 */

public class CopyReadBufferedByteStream {

public static void main(String[] args) {

try {

FileInputStream fis =new FileInputStream("movie.mp4");                

BufferedInputStream bis =new BufferedInputStream(fis);//将读出来的字节流放入到缓冲区中,还可以设置缓冲区的大小//如果一个缓冲区设置的大小合理的话,会降低复制的时间

//实现文件的复制,定义一个输出流

FileOutputStream fos =new FileOutputStream("movie_new.mp4");

BufferedOutputStream bos =new BufferedOutputStream(fos);

 

 

byte input[]=new byte[100];//每次读取100个字节//如果一个数组设置的合理的话,会减少对磁盘io的操作

int count=0;

//计算使用了多少ms读取这个文件

long before=System.currentTimeMillis();

 

while (bis.read(input)!=-1) {

bos.write(input);

count++;

}

bis.close();

fis.close();//先打开的后关闭

bos.close();

fos.close();

 

System.out.println(System.currentTimeMillis()-before+"ms");//计算使用了多少毫秒

 

System.out.println("读取了"+count+"");

 

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

 

}

}

字符流操作数据读写

 

读取的操作:

 

package RWCharStream;

 

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.UnsupportedEncodingException;

 

/**

 *用字符流读取数据

 * @author ALWZ

 *

 */

public class RWByCharStream {

public static void main(String[] args) {

try {

File file=new File("java.txt");

FileInputStream fis=new FileInputStream(file);

InputStreamReader isr=new InputStreamReader(fis,"UTF-8");//把文件读取成字符流

char input[]=new char[100];

while(isr.read(input)!=-1){//将字符流读取到字符数组中

System.out.println(input);

};

 

isr.close();

fis.close();

 

 

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

 

 

}

}

 

 


 

 

 

还有另一种写法:因为有可能出现如下情况,到了输出文本的末尾没有结束,而是从头又输出了几个字符。


 

解决方法如下

package RWCharStream;

 

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.UnsupportedEncodingException;

 

/**

 * 用字符流读取数据

 * @author ALWZ

 *

 */

public class RWByCharStream {

public static void main(String[] args) {

try {

File file=new File("java.txt");

FileInputStream fis=new FileInputStream(file);

InputStreamReader isr=new InputStreamReader(fis,"UTF-8");//把文件读取成字符流

char input[]=new char[100];

/*while(isr.read(input)!=-1){//将字符流读取到字符数组中

System.out.println(new String(input));

};*/

//这样有可能会输出多余的数据,因为可能最后截取的字符,不够100,它又会重新开始读取几个字符来满足100的填充。

 

//于是可以用下面的写法

int length=0;

while((length=isr.read(input))!=-1){//将字符流读取到字符数组中

System.out.println(new String(input,0,length));//给输出的字符串设置偏移量为0,从头开始读,长度为读取字符串的最大长度。

};

 

isr.close();

fis.close();

 

 

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

 

 

}

}

 

这样运行结果和第一个是一样的,只不过可能最后如果读取的字符串不够100个字符,它也不会自动给你补充到100个了。

 


 

 

 

写入,拷贝的操作

package RWCharStream;

 

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.io.UnsupportedEncodingException;

 

/**

 * 用字符流拷贝

 * @author ALWZ

 *

 */

public class WCharStream {

public static void main(String[] args) {

try {

FileInputStream fis =new FileInputStream("java.txt");

FileOutputStream fos=new FileOutputStream("java_new.txt");

InputStreamReader isr=new InputStreamReader(fis,"UTF-8");//把文件读取成字符流

OutputStreamWriter osr =new OutputStreamWriter(fos,"UTF-8");

 

char input[]=new char[100];

 

int length=0;

while((length=isr.read(input))!=-1){//将字符流读取到字符数组中

//String inputString=new String(input,0,length);//将字符输出

osr.write(input,0,length);//将字符输出

};

 

isr.close();

fis.close();

osr.close();

fos.close();

System.out.println("WCharStream.main() done");

 

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

 

 

 


 

带有缓冲的字符流的读写操作:

 

package RWCharStream;

 

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.io.UnsupportedEncodingException;

/**

 *带有缓冲的字符流的读操作

 * @author ALWZ

 *

 */

public class RByBufferCharStream {

 

public static void main(String[] args) {

try {

FileInputStream fis =new FileInputStream("java.txt");

FileOutputStream fos=new FileOutputStream("java_new_buffer.txt");

InputStreamReader isr=new InputStreamReader(fis,"UTF-8");//把文件读取成字符流

OutputStreamWriter osr =new OutputStreamWriter(fos,"UTF-8");

 

//定义读写的缓冲流

BufferedReader br =new BufferedReader(isr);

//BufferedWriter bw =new BufferedWriter(osr);//使用这个api会导致生成的文件中的换行符都被替换掉,从而没有了格式

PrintWriter pw =new PrintWriter(osr);//使用print可以输出流而不会被替换换行符

 

 

String input;

while ((input=br.readLine())!=null) {//读取一行数据

//bw.write(input);//使用这个api会导致生成的文件中的换行符都被替换掉,从而没有了格式

pw.println(input);//使用print可以输出流而不会被替换换行符。

 

};

pw.flush();//将缓冲区的内容强制输出,保证输出的文件是完整的。也可以用bw.flush

//另外还可以在定义printWriter的时候定一个参数new PrintWriter(osr,true),这样当文件输出的时候就会自动强制输出缓存区的内容

 

 

//bw.close();//使用这个api会导致生成的文件中的换行符都被替换掉,从而没有了格式

pw.close();//使用print可以输出流而不会被替换换行符。

br.close();

isr.close();

fis.close();

osr.close();

fos.close();

 

System.out.println("WCharStream.main() done");

 

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

 

 

 

 





评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值