您的位置:首页 > 编程语言 > Java开发

java io流

2016-06-02 13:46 295 查看
字节流:可以读写所用类型的文件

字符流:只能读写纯文本文件

所有缓冲中的数据都必须加flush();强制读出 否则会缺少或增多

输入流读取文件

FileInputStream文件输入流

try {
FileInputStream fis = new FileInputStream("text.txt");
byte input[] =new byte[20];//创建字节数组指定长度
fis.read(input);
String inputString=new String(input);
System.out.println(inputString);
fis.close();

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


FileOutputStream文件输出流

try {
FileOutputStream fos =new FileOutputStream("textw.txt");
String  outString ="write 123456写出数据";
//  byte b=new Byte(outString);
byte[] b=outString.getBytes("UTF-8");
fos.write(b);

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}  //参数为相对路径
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


利用FileInputStream,FileOutputStream 拷贝文件

//将文件"ani.gif"拷贝到"ani_new.gif"
try {
FileInputStream fis = new FileInputStream("ani.gif");
FileOutputStream fos = new FileOutputStream("ani_new.gif");

byte[] input = new byte[50];
while (fis.read(input) != -1) {//把文件读到字节数组中
fos.write(input);//把字节数组写到“aniw.gif” 文件中

}
fis.close();
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


带缓冲的输入输出流BufferedInputStream ,BufferedOutputStream

//将文件movie.mp4拷贝到movie_new.mp4
try {
FileInputStream fis = new FileInputStream("movie.mp4");
BufferedInputStream bis = new BufferedInputStream(fis,10000);// 将输入流包装成缓冲字节流   可以加快读写速度 ,第二个参数是指定缓区的大小 但是要比下面字节数组大   缓冲区的大小设置合适设置可以加快数据读写
FileOutputStream fos=new FileOutputStream("movie_new.mp4");
BufferedOutputStream bos=new BufferedOutputStream(fos,10000);

byte[] input = new byte[100];//把字节数组改大   那么读写次数少了 也就是速度变快了

int count=0;
while ( bis.read(input) !=-1) {
bos.write(input);
count++;

}
bis.close();//先打开的要后关闭 ,后打开的要先关闭
fis.close();
bos.close();
fos.close();
System.out.println("读取了:"+count+"次");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


字符输入输出流

InputStreamReader 将字节流转成字符流

try {

FileInputStream fis=new FileInputStream("java.txt");
InputStreamReader isr=new InputStreamReader(fis,"UTF-8");//将字节流转成字符流

char input[]=new char[100];//字符数组
int L=0;
//这个读取出来的数据可能更源文件不一样 ,读出的java在最后的时候可能会多出几个字,也可能会少几个字,因为读的时候不是刚好到100个字节
/*while(isr.read(input) !=-1){
System.out.println(input);
}*/

//这个就可以完整读出来
while((L=isr.read(input)) !=-1){
System.out.println(new String(input, 0, L));
}

isr.close();
fis.close();

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


利用InputStreamReader和OutputStreamWriter 拷贝文件

//将文件java.txt拷贝到java_new.txt 中
try {

FileInputStream fis=new FileInputStream("java.txt");
FileOutputStream fos=new FileOutputStream("java_new.txt");
InputStreamReader isr=new InputStreamReader(fis,"UTF-8");//将字节流转成字符流
OutputStreamWriter osw=new OutputStreamWriter(fos, "UTF-8");

char input[]=new char[100];//字符数组
int L=0;

//这个就可以完整读出来
while((L=isr.read(input)) !=-1){
//System.out.println(new String(input, 0, L));
osw.write(input, 0, L);
}

isr.close();
fis.close();
osw.close();
fos.close();

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


带有缓冲的字符流 拷贝文件

//将文件"java.txt" 拷贝到"java_new.txt"
try {

FileInputStream fis=new FileInputStream("java.txt");
FileOutputStream fos=new FileOutputStream("java_new.txt");
InputStreamReader isr=new InputStreamReader(fis,"UTF-8");//将字节流转成字符流
OutputStreamWriter osw=new OutputStreamWriter(fos, "UTF-8");

BufferedReader br=new BufferedReader(isr);//带有缓冲的输入流
//  BufferedWriter bw=new BufferedWriter(osw);//带有缓冲的输出流

PrintWriter pw=new PrintWriter(osw,true);//字符打印输出流  第二个参数跟调用flush作用是一样的
String input;

//这个就可以完整读出来
while((input=br.readLine())!=null){
//  bw.write(input);//所读取的数据会显示在一行中
pw.println(input);//每读取一行就会自动换行
}
//  bw.flush(); bw.close();
pw.flush();// 缓冲的数据有时候是不会被读取   flush()将缓冲的数据强制输出
pw.close();
isr.close();
fis.close();
osw.close();
fos.close();

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


FileReader BufferedReader ,FileWriter BufferedWriter

//将文件"java.txt" 拷贝到"java_new.txt"
try {
FileReader  fr = new FileReader("java.txt");
BufferedReader br=new BufferedReader(fr);

FileWriter fw=new FileWriter("java_new.txt");
BufferedWriter bw=new BufferedWriter(fw);
String line;
while ((line=br.readLine())!=null) {
bw.write(line+"\n");

}
bw.flush();//所有带有缓冲的流都要强制输出
bw.close();
fw.close();
br.close();
fr.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: