文件的操作程序
设计要求:
1. 列出一个文件夹中所有符合条件的文件和目录。
2. 删除一个非空的目录,并显示所有被删除的文件和目录列表。
设计思路:
先声明一个String类型的list,当主函数没有参数时,默认的列出当前目录下的所有文件和目录。File dir=new File(".");
list=dir.list();当主函数有一个参数时,则列出这个参数所表示的文件中的所有文件和目录if(args.length==1){
     System.out.println("目录"+dir.getAbsolutePath()+"的列表");
     list=dir.list();
 }当主函数含有两个参数时,列出第一个参数所表示的文件夹中的,含有第二个参数所有表示的字符串的目录和文件。else{
   System.out.println("目录"+dir.getAbsolutePath()+"中含有字符串"+args[1]+"的列表");
    list=dir.list(new MyFileFilter(args[1]));
}列出列表时候,区分文件和目录for(int i=0;i<list.length;i++){
    File f;
    if(args.length==0)     f=new File(list[i]);
    else  f=new File(args[0]+"\\\\"+list[i]);
     if(f.isFile())      System.out.println("file   "+list[i]);
     else       System.out.println("dir   "+list[i]);
}系统提供的delete()方法只能删除一个空目录,当要删除非空目录时,必须先删除目录中所有的内容,然后再删除该目录,应从内向外一层层删除。先创建一个链接列表类,然后将要删除的文件添加进列表。LinkedList dirs=new LinkedList();     //List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。
dirs.add(dir);当列表dirs的内容不为空即dirs.size()>0时循环删除列表中的内容。while(dirs.size()>0){
     File current_dir=(File)dirs.getFirst();
     File []files=current_dir.listFiles();
     boolean empty_dir=true;     //标示文件中单个文件是否全部删除完了
     int len=files.length;
     for(int i=0;i<len;i++){
     if(files[i].isFile()){
     System.out.println(files[i].getAbsolutePath());
     files[i].delete();
     }
     else{
     dirs.addFirst(files[i]);
     empty_dir=false;
     }
     }
     if(empty_dir){     //为真时该文件夹已为空
     System.out.println(current_dir.getAbsolutePath());
     current_dir.delete();    //删除
     dirs.removeFirst();
     }
     }

解决方案 »

  1.   

    import java.io.*;
    public class Main {

    //list=dir.list();
    public static void main(String [] args)throws Exception{
    //String[] list ;
    @SuppressWarnings("unused")
    File dir=new File("e:" +
    "");
    }
    final static void showAllFiles(File dir, String[] args) throws Exception{
    String[] list;
    if(args.length==1){
         System.out.println("目录"+dir.getAbsolutePath()+"的列表");
         list=dir.list();
     }else{
       System.out.println("目录"+dir.getAbsolutePath()+"中含有字符串"+args[1]+"的列表");
       list=dir.list(new  MyFileFilter(args[1]));
    }
    for(int i=0;i<list.length;i++){
        File f;
        if(args.length==0)     f=new File(list[i]);
        else  f=new File(args[0]+"\\\\"+list[i]);
         if(f.isFile())      System.out.println("file   "+list[i]);
         else       System.out.println("dir   "+list[i]);
    }
    }
    interface Filter{
    boolean accept(File f);
    }}
    //..........................................
    import java.io.File;
    import java.io.FilenameFilter;
    public class MyFileFilter implements FilenameFilter { public MyFileFilter(String string) {
    // TODO Auto-generated constructor stub
    } @Override
    public boolean accept(File dir, String name) {
    // TODO Auto-generated method stub
    return false;
    }}
    运行无结果,怎么解释?
      

  2.   

    MyFileFilter里的accept方法,返回true
      

  3.   

    那个accept方法里面是不是需要加东西啊,返回true才可以,不然也是没有结果的?
      

  4.   

    import java.io.*;
    import java.util.LinkedList;
    public class Main {

    private static Object dir;
    //list=dir.list();
    public static void main(String [] args)throws Exception{
    //String[] list ;
    @SuppressWarnings("unused")
    File dir=new File("e:");
    }
    public static void showAllFiles(File dir, String[] args) throws Exception{
    String[] list;
    if(args.length==1){
         System.out.println("目录"+dir.getAbsolutePath()+"的列表");
         list=dir.list();
     }else{
       System.out.println("目录"+dir.getAbsolutePath()+"中含有字符串"+args[1]+"的列表");
       list=dir.list(new  MyFileFilter(args[1]));
    }
    for(int i=0;i<list.length;i++){
        File f;
        if(args.length==0)     f=new File(list[i]);
        else  f=new File(args[0]+"\\\\"+list[i]);
         if(f.isFile())      System.out.println("file   "+list[i]);
         else       System.out.println("dir   "+list[i]);
    }
    }
    public static void delete(File rootDir) throws IOException {
    LinkedList dirs=new LinkedList();     //List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。
    dirs.add(dir);
    while(dirs.size()>0){
         File current_dir=(File)dirs.getFirst();
         File []files=current_dir.listFiles();
         boolean empty_dir=true;     //标示文件中单个文件是否全部删除完了
         int len=files.length;
         for(int i=0;i<len;i++){
         if(files[i].isFile()){
         System.out.println(files[i].getAbsolutePath());
         files[i].delete();
         }
         else{
         dirs.addFirst(files[i]);
         empty_dir=false;
         }
         }
         if(empty_dir){     //为真时该文件夹已为空
         System.out.println(current_dir.getAbsolutePath());
         current_dir.delete();    //删除
         dirs.removeFirst();
         }
         }
    }
    interface Filter{
    boolean accept(File f);
    }}
    //............................................
    import java.io.File;
    import java.io.FilenameFilter;
    public class MyFileFilter implements FilenameFilter { public MyFileFilter(String string) {
    // TODO Auto-generated constructor stub
    } @Override
    public boolean accept(File dir, String name) {
    // File f ="E:\\新建文件夹";
    // TODO Auto-generated method stub
    // String path = f.getAbsolutePath();
    // if(path.toLowerCase().endsWith(".txt")) {
    return true;
    // }
    // return false;
    }}
    //想请教:代码段哪里出问题了....
      

  5.   

    Main.java
    package csdn;import java.io.*;
    import java.util.LinkedList;public class Main { private static Object dir; // list=dir.list();
    public static void main(String[] args) throws Exception {
    // String[] list ;
    File dir = new File("e:\\");
    String s ="a";
    showAllFiles(dir, s);
    }
    /**
     * 目录列表
     * @param dir 要显示的目录
     * @param args 包含指定字符串
     * @throws Exception
     */
    public static void showAllFiles(File dir, String filter) throws Exception {
    File[] list;
    if (filter == null || filter.trim().length()==0) {
    System.out.println("目录 " + dir.getAbsolutePath() + " 的文件及目录列表");
    list = dir.listFiles();
    } else {
    System.out.println("目录 " + dir.getAbsolutePath() + " 中含有字符串 "
    + filter + " 的文件及目录列表");
    list = dir.listFiles(new MyFileFilter(filter));
    }
    for (int i = 0; i < list.length; i++) {
    File f = list[i];
    if (f.isFile())
    System.out.println("file " + list[i]);
    else
    System.out.println("dir " + list[i]);
    }
    } public static void delete(File rootDir) throws IOException {
    LinkedList dirs = new LinkedList(); // List
    // 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括
    // null)。
    dirs.add(dir);
    while (dirs.size() > 0) {
    File current_dir = (File) dirs.getFirst();
    File[] files = current_dir.listFiles();
    boolean empty_dir = true; // 标示文件中单个文件是否全部删除完了
    int len = files.length;
    for (int i = 0; i < len; i++) {
    if (files[i].isFile()) {
    System.out.println(files[i].getAbsolutePath());
    files[i].delete();
    } else {
    dirs.addFirst(files[i]);
    empty_dir = false;
    }
    }
    if (empty_dir) { // 为真时该文件夹已为空
    System.out.println(current_dir.getAbsolutePath());
    current_dir.delete(); // 删除
    dirs.removeFirst();
    }
    } } interface Filter {
    boolean accept(File f);
    }}MyFileFilter.javapackage csdn;import java.io.File;
    import java.io.FilenameFilter;public class MyFileFilter implements FilenameFilter{
    private String filters;//一个字符串
    public MyFileFilter(String filters){
    this.setFilters(filters);
    }
    public boolean accept(File dir, String name) {
    if(name.indexOf(getFilters())>=0){
    return true;
    }
    return false;
    }
    public String getFilters() {
    return filters;
    }
    public void setFilters(String filters) {
    this.filters = filters;
    }
    }
      

  6.   


    package csdn;import java.io.*;
    import java.util.Arrays;
    import java.util.LinkedList;public class Main {
    public static void main(String[] args) throws Exception {
    // String[] list ;
    File dir = new File("e:\\");
    String[] s ={"a","源"};
    showAllFiles(dir, s);
    File delDir = new File("e:\\test");
    delete(delDir);
    }
    /**
     * 目录列表
     * @param dir 要显示的目录
     * @param args 包含指定字符串数组
     * @throws Exception
     */
    public static void showAllFiles(File dir, String[] filters) throws Exception {
    File[] list;
    if (filters==null || filters.length == 0 ) {
    System.out.println("目录 " + dir.getAbsolutePath() + " 的文件及目录列表");
    list = dir.listFiles();
    } else {
    String tmp = Arrays.toString(filters);
    System.out.println("目录 " + dir.getAbsolutePath() + " 中含有字符串 "
    + tmp + " 的文件及目录列表");
    list = dir.listFiles(new MyFileFilter(tmp.substring(1,tmp.length()-1)));
    }
    for (int i = 0; i < list.length; i++) {
    File f = list[i];
    if (f.isFile())
    System.out.println("file " + list[i]);
    else
    System.out.println("dir " + list[i]);
    }
    }
    /**
     * 清空目录,从外到内
     * 如目录空,删除
     * 如目录不空,扫描子文件,文件删除,目录递归删除
     * @param dir
     * @throws IOException
     */
    public static void delete(File dir) throws IOException {
    if(!dir.exists()){
    System.out.println("目录不存在!");
    return;
    }
    File[] files = dir.listFiles();
    if(files.length==0){
    System.out.println("删除目录 "+dir.getPath()+" ...");
    if(dir.delete()){
    System.out.println("目录 " + dir.getPath() + " 已删除!");
    }else{
    System.out.println("目录 " + dir.getPath() + " 删除失败!");
    }
    }else{
    for(int i=0;i<files.length;i++){
    File f = files[i];
    if(f.isFile()){
    System.out.println("删除文件 "+f.getPath()+" ...");
    if(f.delete()){
    System.out.println("文件 "+f.getPath() +" 已删除!");
    }else{
    System.out.println("文件 "+f.getPath() +" 删除失败!");
    }
    }else{
    delete(f);
    }
    }
    System.out.println("删除目录 "+dir.getPath()+" ...");
    if(dir.delete()){
    System.out.println("目录 " + dir.getPath() + " 已删除!");
    }else {
    System.out.println("目录 " + dir.getPath() + " 删除失败!");
    }
    }
    }
    }package csdn;import java.io.File;
    import java.io.FilenameFilter;public class MyFileFilter implements FilenameFilter{
    private String filters;//一个字符串,如果有多个,中间由","分割
    public MyFileFilter(String filters){
    this.setFilters(filters);
    }
    public boolean accept(File dir, String name) {
    String[] tmp = getFilters().split(",");
    boolean flag = false;
    for(int i=0;i<tmp.length;i++){
    flag = flag || (name.indexOf(tmp[i].trim())>=0);
    }
    return flag;
    }
    public String getFilters() {
    return filters;
    }
    public void setFilters(String filters) {
    this.filters = filters;
    }
    }
      

  7.   

    import java.io.File;
    public class FileClear {
    public static void main(String[] args)
    {
    FileClear.clearFiles(new File("C:\\FMSWokDir\\works\\test"), "1");
    } public static boolean  clearFiles(File sourceDir,String type)
    {
    boolean flag = false;
    try
    {
    File[] files = sourceDir.listFiles();
    //delete all files and directories
    if(type.equals("2"))
    {
    for(File file:files)
    {
    if(file.isFile())
    {
    file.delete();
    }
    else
    {
    clearFiles(file,type);
    file.delete();
    }

    }
    }
    else if (type.equals("1"))
    {
    for(File file:files)
    {
    if(file.isFile())
    {
    file.delete();
    }
    else
    {
    clearFiles(file,type);
    }
    } } }
    catch(Exception e)
    {
    System.out.println("error:"+e.getMessage());
    }
    flag = true;
    return flag;
    }
    }