迟到的第14周作业
题目:
编写一个应用程序,输入一个目录和一个文件类型,显示该目录下符合该类型的所有文件。之后,将这些文件中的某一个文件剪切到另外一个目录中。
源代码:Test.java(接收用户输入路径文件名)
/*Test类,主方法main * String型s1,s2,s3,s5接收用户输入内容 * String型s4,s6合成文件路径 * 创建Select 对象st,Shear 对象sr, * 调用st.SelectType()方法和sr.WriteIn方法()并传参 * */ package ccut.edu.wj; import java.util.Scanner; public class Test { public static void main(String[] args) { // TODO Auto-generated method stub //用户输入需要的文件路径,文件类型 Scanner in = new Scanner(System.in); System.out.print("请输入文件路径:"); String s1 = in.nextLine(); System.out.print("请输入文件格式后缀:"); String s2 = in.nextLine(); //选择需要的文件类型 Select st = new Select();//创建Select类对象 st.SelectType(s1, s2);//调用选择文件类型的方法 //剪切选中的文件 System.out.print("请输入需要剪切的文件名:"); String s3 = in.nextLine(); String s4 = s1+"\\\\"+s3+"."+s2;//合成路径全称 System.out.print("请输入需要剪切到哪个目录:"); String s5 = in.nextLine(); String s6 = s5+"\\\\"+s3+"."+s2;//合成文件路径全称 Shear sr =new Shear();//创建Shear类对象 sr.WriteIn(s4,s6);//调用WriteIn方法,传参两个路径 } }
源代码:Select.java(显示目录下符合类型的所有文件)
/*Select类,方法SelectType * File 对象path * getFilenames类实现接口FilenameFilter * 构造方法getFilenames() * 字符数组filenames[]存储符合的文件名 * */ package ccut.edu.wj; import java.io.File; import java.io.FilenameFilter; public class Select {//选择指定类型文件 public void SelectType(String s1,String s2) { File path = new File(s1);//创建File的对象path,并给文件路径s1 FilenameFilter endName = new getFilenames(s2);//接口回调,给s2(文件类型) String[] filenames = path.list(endName); System.out.println("一共有"+filenames.length+"个"+s2+"类型的文件!"); for(String name : filenames) {//循环输符合的文件名 System.out.println(name); } } } class getFilenames implements FilenameFilter{//实现接口 String style ; getFilenames(String style){//构造方法 this.style=style; } public boolean accept(File file, String name) {//比较结尾 return name.endsWith(style); } }
源代码:Select.java(选一个文件剪切到另外一个目录中)
/*Shear类,方法WriteIn * File 对象f,f1。 * 创建新文件f1.createNewFile(); * while循环读取每行内容,同时把每行内容写入到新文件中 * */ package ccut.edu.wj; import java.io.*; public class Shear { public void WriteIn(String s4,String s6) { File f = new File(s4); InputStreamReader in = null; BufferedReader bin =null; File f1 = new File(s6); Writer w = null; BufferedWriter bw= null; try { //FileReader不能手动设置编码,使用InputStreamReader来代替,用InputStreamReader来读取,后面配上编码格式 in = new InputStreamReader(new FileInputStream(f),"UTF-8");//防止中文乱码 bin = new BufferedReader(in); f1.createNewFile();//真正创建文件 w = new FileWriter(f1,false);//覆盖写入 bw = new BufferedWriter(w); while(true){//循环读取每行内容 String line=bin.readLine();//按行读取文件 if(line==null){//如果行为空就退出循环 break; } //System.out.println(line); bw.write(line+'\n');//读取每行的同时,向创建的新文件写入每行内容,同时换行 } System.out.println("剪切完成!"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { try { bin.close(); in.close(); bw.close(); w.close();
f.delete(); } catch (IOException e) { e.printStackTrace(); } } } }
运行结果:
剪贴后: