欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

11 IO流总结及相关练习题

程序员文章站 2022-04-03 17:14:12
...

一 IO流总结


11 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();
		
	}
}



相关标签: IO