一、题目:编写一个应用程序,输入一个目录和一个文件类型,显示该目录下符合该类型的所有文件。之后,将这些文件中的某一个文件剪切到另外一个目录中。
ps:第一次课请先完成前一部分。
二、代码
1.Test
/**
* 创建FileAccept包含
* 成员变量str
* 构造方法
* accept方法
* 创建Test类
* 包含主方法
* FileAccept类的对象acceptCondition
* 调用fileList方法
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.Scanner;
class FileAccept implements FilenameFilter{
String str = null;
FileAccept(String s){
str = "."+s;
}
@Override
public boolean accept(File dir, String name) {
// TODO Auto-generated method stub
return name.endsWith(str);
}
}
public class Test {
public static void main(String[] args) throws IOException {
Scanner reader=new Scanner(System.in);
System.out.println("请输入文件路径:");
String P =reader.nextLine();
File dir = new File(P);
System.out.println("请输入需要查找的文件后缀");
String A =reader.nextLine();
FileAccept acceptCondition = new FileAccept(A);//设置文件名后缀
String fileList[] =dir.list(acceptCondition); //获取文件名
System.out.println("目录下有"+fileList.length+"文件");
for (int i = 0; i < fileList.length; i++) {
System.out.println(fileList[i]);
}
System.out.println("请输入需要剪切的文件名:");
String name = reader.nextLine();
System.out.println("请输入需要剪切至那个目录");
String target = reader.nextLine();
File namefile = new File(P+"\"+name);
FileInputStream in = new FileInputStream(namefile);
File targetfile = new File(target+"\"+name);
targetfile.createNewFile(); //在目标目录创建新文件;
FileOutputStream out = new FileOutputStream(targetfile);
byte[] bytes = new byte[1024];
int count = 0 ;
try {
while((count = in.read(bytes, 0, 1024)) != -1){ //将原文件内容读写入到目标文件中
out.write(bytes, 0, count);
out.flush();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}finally{
if(in != null){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(out != null)
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
namefile.delete(); //删除原文件
}
}
* 创建FileAccept包含
* 成员变量str
* 构造方法
* accept方法
* 创建Test类
* 包含主方法
* FileAccept类的对象acceptCondition
* 调用fileList方法
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.Scanner;
class FileAccept implements FilenameFilter{
String str = null;
FileAccept(String s){
str = "."+s;
}
@Override
public boolean accept(File dir, String name) {
// TODO Auto-generated method stub
return name.endsWith(str);
}
}
public class Test {
public static void main(String[] args) throws IOException {
Scanner reader=new Scanner(System.in);
System.out.println("请输入文件路径:");
String P =reader.nextLine();
File dir = new File(P);
System.out.println("请输入需要查找的文件后缀");
String A =reader.nextLine();
FileAccept acceptCondition = new FileAccept(A);//设置文件名后缀
String fileList[] =dir.list(acceptCondition); //获取文件名
System.out.println("目录下有"+fileList.length+"文件");
for (int i = 0; i < fileList.length; i++) {
System.out.println(fileList[i]);
}
System.out.println("请输入需要剪切的文件名:");
String name = reader.nextLine();
System.out.println("请输入需要剪切至那个目录");
String target = reader.nextLine();
File namefile = new File(P+"\"+name);
FileInputStream in = new FileInputStream(namefile);
File targetfile = new File(target+"\"+name);
targetfile.createNewFile(); //在目标目录创建新文件;
FileOutputStream out = new FileOutputStream(targetfile);
byte[] bytes = new byte[1024];
int count = 0 ;
try {
while((count = in.read(bytes, 0, 1024)) != -1){ //将原文件内容读写入到目标文件中
out.write(bytes, 0, count);
out.flush();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}finally{
if(in != null){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(out != null)
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
namefile.delete(); //删除原文件
}
}
三、运行结果