黑马程序员-------Java笔记-------IO题(常见的2种题型)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

  • IO说到底不外乎读与写
  • 编写一个程序,把这个目录下的java文件拷贝到另一个目录中,并将.java改为.txt
  • 编写一个程序,把这个目录下的所有的java文件拷贝到另一个目录中,并将.java改为.txt
  • 取出D盘下全部的.java文件的文件路径保存在java.txt文件中。
    package demo;
    
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.FilenameFilter;
    import java.io.IOException;
    
    //编写一个程序,把某个目录下的java文件拷贝到另一个目录中,并将.java改为.txt
    /**
     * 思路:
     * 1.封装数据源
     * 2.获取目录下.java的文件数组
     * 3.封装目的地,判断是否存在,不存在就创建
     * 4.遍历文件数组,获取每一个文件的名称,创建新名字。
     * 5.封装具体实例的目的地
     * 6.读,写
     * 7.刷新,释放资源,
     * 注意:考了文件copy的基本步骤,IO流的读写,用到了匿名内部类(文件名称过滤器),字符串的常见的操作。
     * 		理清了这些基本的操作思路,题目就明朗了。当然了,读和写,还可以用其他的流来进行操作。
     * 		这里出现的异常被我抛了。
     *
     */
    public class Demo10 {
    	public static void main(String[] args) throws IOException {
    		//封装数据源
    		File f = new File("e:\\");
    		//获取该数据的所有.Java文件数组
    		File[] arr=f.listFiles(new FilenameFilter() {//文件过滤器
    			public boolean accept(File dir, String name) {
    				//判断是否是文件并且后缀名是否为.java
    				return new File(dir,name).isFile()&&name.endsWith(".java");
    			}
    		});
    		//封装目的地
    		File fm = new File("f:\\ddd");
    		//判断是否存在,不存在就创建
    		if(!fm.exists()){
    			fm.mkdirs();
    		}
    		//遍历文件数组
    		for (int i = 0; i < arr.length; i++) {
    			String name=arr[i].getName();
    			//改名字
    			String newName=name.replace(".java", ".txt");
    			//封装每一个实例对象的目的地
    			File file = new File(fm,newName);
    			//读写
    			FileReader r = new FileReader(arr[i]);
    			FileWriter w = new FileWriter(file);
    			int len=0;
    			char[] chs=new char[1024];
    			while((len=r.read(chs))!=-1){
    				w.write(chs,0,len);
    				//刷新缓冲区
    				w.flush();
    			}
    			//关闭流
    			w.close();
    			r.close();
    		}
    		
    	}
    
    }
    

  • *****************************************************************************************************************************
    package demo;
    
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    
    //编写一个程序,把某个目录下的所有的java文件拷贝到另一个目录中,并将.java改为.txt
    /**
     * 这一个和上一题差不多,只是包过了他的子文件夹,这里用递归来做。
     * 思路:
     * 1.封装数据源
     * 2.获取数据源下所有的file对象的数组
     * 3.判断数组是否为空,不为空就遍历,获取到每一个file对象,判断是否是文件夹
     * 			是:重复2
     * 			否:判断后缀名是否是.java
     * 				是:该名字,封装每个实例对象的目的地。
     * 5.读,写,
     * 6.释放资源
     */
    public class Demo10_2 {
    	public static void main(String[] args) throws IOException {
    		//封装数据源
    		File fy = new File("d:\\");
    		
    		get(fy);
    	}
    	/**
    	 * copy文件的方法
    	 * @param fy 数据源
    	 * @throws IOException
    	 */
    	private static void get(File fy) throws IOException {
    		//封装目的地
    		File ff=new File("f:\\zzzz");
    		if(!ff.exists()){
    			ff.mkdirs();
    		}
    		//获取数据源下的所有file数组
    		File[] arr=fy.listFiles();
    		//判断数组是否为空
    		if(arr!=null){
    			//不为空就遍历数组
    			for(File file:arr){
    				//如果是文件夹,就重复前面的操作,直到没有文件夹
    				if(file.isDirectory()){
    					get(file);
    				}else{
    					//文件就判断后缀名是否为.java
    					if(file.getName().endsWith(".java")){
    						//是就该名字
    						String s=file.getName().replace(".java", ".txt");
    						//封装实例对象的目的地
    						File fm=new File(ff,s);
    						//读写
    						FileReader r=new FileReader(file);
    						FileWriter w=new FileWriter(fm);
    						int len=0;
    						char[] chs=new char[1024];
    						while((len=r.read(chs))!=-1){
    							w.write(chs,0,len);
    							w.flush();
    						}
    						r.close();
    						w.close();
    						
    						
    					}
    				}
    			}
    		}
    		
    		
    	}
    
    }
    

  • ***********************************************************************************************************************
    package test;
    
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    
    //取出D盘下全部的.java文件的文件路径保存在java.txt文件中。、
    /**
     * 思路:
     * 1.封装数据源
     * 2.获取数据源下所有的file对象的数组
     * 3.定义一个字符缓冲流(封装目的地需要先判断,这里我直接写在了F盘符下面,就省略了这一步,如果是考试可能会扣* *	分)
     * 4.判断数组是否为空,不为空就遍历,获取到每一个file对象,判断是否是文件夹
     * 			是:重复2
     * 			否:判断后缀名是否是.java
     * 				是:获取绝对路径,写数据,换行,刷新。
     * 5.关闭流对象
     *注意:这里的写入数据得追加写入。
     */
    
    public class Demo14_2 {
    	public static void main(String[] args) throws IOException {
    		//封装数据源
    		File f = new File("d:\\");
    		get(f);
    		
    	}
    	/**
    	 * 获取f目录下的所有.Java文件的绝对路径,写入。
    	 * @param f
    	 * @throws IOException
    	 */
    	private static void get(File f) throws IOException {
    		//获取数据源下所有的file对象的数组
    		File[] arr = f.listFiles();
    		//创建一个写入流
    		BufferedWriter bf = new BufferedWriter(new FileWriter("f:\\ff.txt",true));
    		//判断数组是否为空
    		if (arr != null) {
    			//遍历数组
    			for (File file : arr) {
    				//file对象为文件夹就重复
    				if (file.isDirectory()) {
    					get(file); 
    				} else {
    					//如果为文件,判断其后缀名
    					if (file.getName().endsWith(".java")) {
    						//获取其绝对路径的字符串
    						String s = file.getAbsolutePath();
    						//写
    						bf.write(s);
    						//换行
    						bf.newLine();
    						//刷新
    						bf.flush();
    
    					}
    				}
    			}
    			bf.close();//关闭流对象
    		}
    
    	}
    
    }
    

你可能感兴趣的:(Java笔记)