11 IO流总结及相关练习题

一 IO流总结



练习一

package Stream;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

/*
 * IO流复制文本文件的五种方式
 * 数据源  
 *        limi.txt   字符流    读   Reader   InputStreamReader(FileReader)
 *
 * 目的地
 *        zxx.txt    字符流    写  Writer   OutputStreamWriter(FileWriter)
 */
public class IOstearmDemotest01 {
	public static void main(String[] args) throws IOException   {
		method1();//字符流一次读取一个字符
//		method2();//字符流一次读取一个字符数组
//		method3();//缓冲流的特殊功能
//		method4();//缓冲流一次读取一个字符
//		method5();//缓冲流一次读取一个字符数组
	}

/**********11111111111111111111111111111**********************/
	public static void method1() throws IOException {
		//数据源
		FileReader fr1 = new FileReader("limi.txt");
		//目的地
		FileWriter fw1 = new FileWriter(" zxx.txt");
		//一次读取一个字符
		int by =0 ;
		while((by=fr1.read())!=-1){
			fw1.write((char)by);
		}
		//释放资源
		fr1.close();
		fw1.close();
	}
	/**********222222222222222222222222 **********************/
	public static void method2() throws IOException {
		//数据源
		FileReader fr2 = new FileReader("limi.txt");
		//目的地
		FileWriter fw2 = new FileWriter(" zxx.txt");
		//一次读取一个字符数组
		char[] ch = new char[1024];
		int len = 0;
		while((len=fr2.read(ch))!=-1){
			fw2.write(ch,0,len);
		}
		//释放资源
		fr2.close();
		fw2.close();
	}
	/**********333333333333333333333333333*********************/
	public static void method3() throws IOException {
	//数据源
	BufferedReader br3 = new BufferedReader(new FileReader("limi.txt"));
	//目的地
	BufferedWriter bw3 = new BufferedWriter(new FileWriter("zxx.txt"));
	//特殊功能
	String len = null ;
	while((len =br3.readLine())!= null){
		bw3.write(len);
		bw3.newLine();
	}
	//释放资源
	br3.close();
	bw3.close();
 }
	/**********4444444444444444444444444444*********************/
   public static void method4() throws IOException {
		//数据源
		BufferedReader br4 = new BufferedReader(new FileReader("limi.txt"));
		//目的地
		BufferedWriter bw4 = new BufferedWriter(new FileWriter("zxx.txt"));
		//一次读取一个字符串
		//一次读取一个字符
		int by =0 ;
		while((by=br4.read())!=-1){
			bw4.write((char)by);
		}
		//释放资源
		br4.close();
		bw4.close();
	}
	/**********5555555555555555555555555555555555*********************/
	public static void method5() throws IOException {
		//数据源
		BufferedReader br5 = new BufferedReader(new FileReader("limi.txt"));
		//目的地
		BufferedWriter bw5 = new BufferedWriter(new FileWriter("zxx.txt"));
		//一次读取一个字符串的一部分
		char[] ch = new char[1024];
		int len = 0;
		while((len=br5.read(ch))!=-1){
			bw5.write(ch,0,len);
		}
		//释放资源
		br5.close();
		bw5.close();
	}
}

练习二

package Stream;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;


/*
 * IO流复制图片的四种方式
 * 数据源  
 *        华清池.jpg      字节流    读   InputStream   FileInputStream
 *
 * 目的地
 *        东方不败.jpg    字节流    写  OutputStream   FileOutputStream
 */
public class IOstearmDemotest02 {
	public static void main(String[] args) throws IOException   {
//		method1();//字节流一次读取一个字节
//		method2();//字节流一次读取一个字节数组
//		method3();//字节缓冲流一次读取一个字节
		method4();//字节缓冲流一次读取一个字节数组
	}

/**********11111111111111111111111111111**********************/
	public static void method1() throws IOException {
		//数据源
		FileInputStream fi1 = new FileInputStream("华清池.jpg");
		//目的地
		FileOutputStream fo1 = new FileOutputStream("东方不败.jpg");
		//一次读取一个字节
		int by =0 ;
		while((by=fi1.read())!= -1){
			fo1.write(by);
		}
		//释放资源
		fi1.close();
		fo1.close();
	}
	/**********222222222222222222222222 **********************/
	public static void method2() throws IOException {
		//数据源
		FileInputStream fi2 = new FileInputStream("华清池.jpg");
		//目的地
		FileOutputStream fo2 = new FileOutputStream("东方不败.jpg");
		//一次读取一个字节数组
		byte[] ch = new byte[1024];
		int len = 0;
		while((len=fi2.read(ch))!=-1){
			fo2.write(ch,0,len);
		}
		//释放资源
		fi2.close();
		fo2.close();
	}
	/**********333333333333333333333333333*********************/
   public static void method3() throws IOException {
	    //数据源
		BufferedInputStream bis1 = new BufferedInputStream(new FileInputStream("华清池.jpg"));
		//目的地
		BufferedOutputStream bos1 = new BufferedOutputStream(new FileOutputStream("东方不败.jpg"));
		//一次读取一个字节
		int by =0 ;
		while((by=bis1.read())!=-1){
			bos1.write(by);
		}
		//释放资源
		bis1.close();
		bos1.close();
	}
	/**********44444444444444444444444444444444*********************/
	public static void method4() throws IOException {
		//数据源
		BufferedInputStream bis2 = new BufferedInputStream(new FileInputStream("华清池.jpg"));
		//目的地
		BufferedOutputStream bos2 = new BufferedOutputStream(new FileOutputStream("东方不败.jpg"));
		//一次读取一个字符串的一部分
		byte[] ch = new byte[1024];
		int len = 0;
		while((len=bis2.read(ch))!=-1){
			bos2.write(ch,0,len);
		}
		//释放资源
		bis2.close();
		bos2.close();
	}
}

练习三 把ArrayList集合中的字符串数据存储到文本文件

package Stream;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
/*
 * 把ArrayList集合中的字符串数据存储到文本文件
 * 分析 
 * 数据源
 *      ArrayList集合中的字符串数据     字符流
 *      
 * 目的地
 *      文本文件       字符流
 */
public class IOstearmDemotest03 {
	public static void main(String[] args) throws IOException{
		
		
		//首先要有集合封装数据源
		ArrayList<String> arr  = new ArrayList<String> ();
		arr.add("hello");
		arr.add("world");
		arr.add("java");
		
	    //封装目的地
		BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));
		for(String s:arr){
			bw.write(s);
			bw.newLine();
			bw.flush();
		}
		bw.close();
	}
	}

练习四 把文本中的文件存储到集合中

package Map.HashMap;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

/*把文本中的文件存储到集合中
 * 
 * 分析
 * 数据源  文本文件
 * a.txt   字符流
 * 
 * 目的地   集合
 *  ArrayList   
 * */
public  class IOStreamDemo{
	
	public static void main(String[] args) throws IOException {
		
		//数据源
		BufferedReader  br = new BufferedReader(new FileReader("a.txt"));
		//目的地
		ArrayList<String> array = new 	ArrayList<String>();
		
		 char[] ch = new char[1024]; 
		 String line = null;
		 while((line=br.readLine())!= null){
			 array.add(line);
		 }
		 ch.clone();
		 //遍历集合
		 for(String s:array){
			 System.out.println(s);
			 
		 }
	}
}

练习五:一个文本文件存储了几个名称,请写一个程序随机获取一个人的名字

package Map.HashMap;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;

/*我有一个文本文件存储了几个名称,请写一个程序随机获取一个人的名字
 *  分析:
 *    A:把文本文件中的数据存储到集合中
 *    B:随机产生一个索引
 *    C:根据索引获取一个值
 * 
 * */
public  class IOStreamDemo001{
	
	public static void main(String[] args) throws IOException {
		
		//数据源
		BufferedReader  br = new BufferedReader(new FileReader("a.txt"));
		
		//目的地
		ArrayList<String> array = new 	ArrayList<String>();
		
		 char[] ch = new char[1024]; 
		 String line = null;
		 while((line=br.readLine())!= null){
			 array.add(line);
		 }
		 ch.clone();
		 //获取随机数组
			Random r = new Random();
			int index = r.nextInt(array.size());//产生的随机数大小在0-size之间
		 //根据索引获取随机数的值
			String name =  array.get(index);
			System.out.println("该幸运者是     "+name);
	}
}

练习六: 复制单级文件夹

package Map.HashMap;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
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.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;

/*复制单级文件夹
 * 数据源:e://demo
 * 目的地:e://test
 * 
 * 分析
 *   A:封装目录
 *   B: 获取该目录下的所有文件的File数组
 *   C:遍历File数组得到每一个File对象
 *   D:把该File进行复制
 *   注意文件会自动创建,而文件夹不会
 *   
 * */
public  class IOStreamDemo002{
	
	public static void main(String[] args) throws IOException{
//		 A:封装目录
		File srcFolder = new File("e://demo");
//		B:封装目的地
		File destFolder = new File("e://test");
		//如果目的地文件夹不存在,就创建
		if (!destFolder.exists()) {
			destFolder.mkdir();
		}
//		获取该目录下的所有文本的File数组
		File[] fileArray = srcFolder.listFiles();
		
		for(File f:fileArray){
//			e:\demo\IoDemo09.java
			String name = f.getName();//IoDemo09.java
			File newFile  = new File(destFolder, name);//e:\test\IoDemo09.java
			copeFile(f,newFile);
		}
	}

	public static void copeFile(File f, File newFile) throws IOException {
		BufferedInputStream bis = new BufferedInputStream(new FileInputStream(f));
		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile));
		ArrayList<File> ary = new ArrayList<File>();
		
		
		byte[] by = new byte[1024];
		int len = 0;
		while((len = bis.read(by))!=-1){
			bos.write(by, 0, len);
		}
		bos.close();
		bis.close();
		
	}	
}

练习七:复制指定目录下指定文件,并修改后缀名

package Map.HashMap;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
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.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;

/*复制指定目录下指定文件,并修改后缀名
 *   
 * */
public  class IOStreamDemo003{
	
	public static void main(String[] args) throws IOException {
		File srcFolder = new File("e://io");
		File destFolder = new File("e://wy");
		if(!destFolder.exists()){
			destFolder.mkdir();
		}
		File[] fileFolder = srcFolder.listFiles();
		for(File file:fileFolder){
		 if (file.isFile()&& file.getName().endsWith(".java")) {
			String name =  file.getName();
             File newFile = new File(destFolder, name);
         	copyFile(file,newFile);
		}
		 //在目的地目录下改名
		 File[] filefolder = destFolder.listFiles();
		 for(File F:filefolder){
//			 System.out.println(F);//e:\wy\IoDemo04.java
			 String name = F.getName();
//			 System.out.println(name);
			 String newname = name.replace(".java", ".jad");
			 File newFile1 = new File(destFolder,newname);
			 System.out.println(newFile1);
			 
		 }
	}
	}
	public static void copyFile(File file, File newFile) throws IOException {
		BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile));
		byte[] by = new byte[1024];
		int len = 0;
		while((len = bis.read(by))!= -1 ){
			bos.write(by, 0, len);
		}
		
		bis.close();
		bos.close();
	}
}

练习八:复制多级文件夹

package IO;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 需求:复制多级文件夹
 *
 *数据源 F:\zxx\demos
 *目的地 F:\\
 *   分析
 *     A:封装数据源File
 *     B:封装目的地File
 *     C:判断该File是文件夹还是文件
 *        a 是文件夹
 *             就在目的地目录下创建该文件夹
 *             获取该File对象下的所有文件或文件夹File对象
 *             遍历每一个File对象
 *             回到C
 *        b 是文件
 *             就复制(字节流)
 *
 **/
public class StreamDemo01 {
	public static void main(String[] args) throws IOException {
		//封装数据源File
		File srcFile = new File("F:\\zxx\\demos");
		//封装目的地File
		File descFile = new File("F:\\");
		
		//复制文件夹功能
		CopeFoledor(srcFile,descFile);
	}

	public static void CopeFoledor(File srcFile, File descFile) throws IOException {
		//判断该File是文件夹还是文件
				if(srcFile.isDirectory()){
					//文件夹
					File newFodler =  new File(descFile,srcFile.getName());
					newFodler.mkdir();
					//获取该File对象下的所有文件或文件夹File对象
					File[] file = srcFile.listFiles();
					for(File f:file){
						CopeFoledor(f,newFodler);	
					}
				}else{
					//文件
					File newFile =  new File(descFile,srcFile.getName());
					CopeFile(srcFile,newFile);
				}
	}
	//专门复制文件
      public static void CopeFile(File srcFile, File newFile) throws IOException {
    	BufferedInputStream  bis = new BufferedInputStream(new FileInputStream(srcFile));
  		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile));
  		byte[] cr = new byte[1024];
  		int len = 0;
  		while((len= bis.read(cr))!= -1){
  			bos.write(cr, 0, len);
  			
  		}
  		bis.close();
  		bos.close();
		
	}
}



猜你喜欢

转载自blog.csdn.net/zhangxinxin1108/article/details/80061416