字节流:可以读写所用类型的文件
字符流:只能读写纯文本文件
所有缓冲中的数据都必须加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();
}