题目:
编写一个应用程序,输入一个目录和一个文件类型,显示该目录下符合该类型的所有文件。之后,将这些文件中的某一个文件剪切到另外一个目录中。
源代码: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+'
');//读取每行的同时,向创建的新文件写入每行内容,同时换行
}
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();
}
}
}
}
运行结果:
剪贴后: