第二题:
写出来了,但复制文件到指定目录时说拒绝访问,可以研究下
[AppleScript] 纯文本查看 复制代码 package myexam;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
/*
*
* 创建一个集合,内容有:[“测试题”,“点招”,“模拟练习”,“编程”];
* 手动在D盘根目录下新建“test”文件夹,递归遍历“D:\\ks”文件夹下所有
* 文件,将与该集合中所包含元素名称相同的“.txt”文件复制一份到“test”
* 文件夹中;
*
* 思路:
* 1.遍历目录文件夹下的子文件及子文件夹
* 2.获取后缀名为".txt"的文件,并存存入集合List files中
* 3.从List files中获取与该集合中所包含元素名称相同的文件,存入新集合list2中
* 4.复制到指定文件夹
*/
public class Test19 {
public static void main(String[] args) throws IOException {
List<String> list =new ArrayList<String>();
list.add("测试题");
list.add("点招");
list.add("模拟练习");
list.add("编程");
File dir=new File("D:\\ks");
File newDir=new File("D:\\test");
@SuppressWarnings("unchecked")
//获取指定文件的集合
List<File> list2=fileListByContain(dir, list);
for (File file : list2) {
System.out.println(file);
}
copyFile2(list2, newDir);
}
//用过滤器获取文件的方法
public static void getFileList(File dir,List<File> list,FileFilter filter){
//通过listFile()方法,获取dir当前路径下的所有文件和文件夹对象
File[] files=dir.listFiles();
//遍历该文件数组
for (File file : files) {
//如果有子文件夹,需要递归判断
if(file.isDirectory()){
getFileList(dir, list, filter);
}else{//通过过滤器对文件进行过滤
if(filter.accept(file)){
list.add(file);
}
}
}
}
//获取".txt"指定后缀名。
@SuppressWarnings("rawtypes")
public static List fileListBySuffix(File dir){
//定义集合
List<File> files=new ArrayList<File>();
FileFilter filter= new FilterBySuffix(".txt");
getFileList(dir,files,filter);
return files;
}
//获取指定文件名
@SuppressWarnings({ "unchecked", "rawtypes" })
public static List fileListByContain(File dir,List<String> list){
List<File> files=fileListBySuffix(dir);
List<File> list2=new ArrayList<File>();
for (File file : files) {
for (String string : list) {
if(file.getName().contains(string)){
list2.add(file);
}
}
}
return list2;
}
//将文件复制到新文件夹中
public static void copyFile(List<File> list,File newDir) throws IOException{
if(!newDir.exists()){
newDir.mkdir();
}
BufferedReader bufr=null;
BufferedWriter bufw=null;
String line=null;
bufw=new BufferedWriter(new FileWriter(newDir));
for (File file : list) {
bufr=new BufferedReader(new FileReader(file));
while((line=bufr.readLine())!=null){
bufw.write(line);
}
}
System.out.println("文件复制成功");
bufr.close();
bufw.close();
}
public static void copyFile2(List<File> list,File newDir) throws IOException{
OutputStream out = new FileOutputStream(newDir);
InputStream in =null;
for (File file : list) {
in = new FileInputStream(file);
byte[] buffer = new byte[1024];
int length;
while ((length = in.read(buffer)) > 0) {
out.write(buffer, 0, length);
}
}
in.close();
out.close();
}
}
//以下为文件过滤器工具类
//创建一个包含文件名的过滤器类,可能用不上,做参考
class FilterByContain implements FileFilter{
private String content;
public FilterByContain(String content) {
super();
this.content = content;
}
/*public boolean accept(String name) {
return name.contains(content);
}*/
@Override
public boolean accept(File pathname) {
return pathname.getName().contains(content);
}
}
//创建一个包含后缀名的过滤器
class FilterBySuffix implements FileFilter{
private String suffix;
public FilterBySuffix(String suffix) {
super();
this.suffix = suffix;
}
/*public boolean accept(File dir, String name) {
return name.endsWith(suffix);
}*/
@Override
public boolean accept(File pathname) {
return pathname.getName().endsWith(suffix);
}
}
|