【问题标题】:Read and delete files from folder [closed]从文件夹中读取和删除文件[关闭]
【发布时间】:2015-11-14 20:07:57
【问题描述】:

我正在尝试编写一个程序来读取文件夹中的每个文件,并且在读取文件中的内容后,文件应该被删除。我可以编写程序来读取文件夹中的文件并分别从文件夹中删除文件,但无法将它们都集成到一个程序中。

【问题讨论】:

  • 向我们展示您迄今为止为尝试完成任务所做的工作。
  • 如果您的代码有问题,您需要向我们展示一些代码,以便我们了解您在做什么
  • 如果你有一个程序读取文件而另一个程序删除文件,你可以把public static void main()中的所有东西都放到一个新的public void run()中,然后调用A.run()B.run() .

标签: java java-io


【解决方案1】:

这是我编写和测试的 Java 代码。它工作正常。

它会首先列出指定目录下的所有文件以及里面的各级子目录。

然后它会一一读取指定目录下的所有文件及里面的各级子目录,读完文件后删除。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class RecursiveFileDisplay {

    public static void main(String[] args) {
        File currentDir = new File("D:\\test"); // current directory
        File[] fileList = displayDirectoryContents(currentDir);
        readAndDeleteFiles(fileList);
    }

    public static File[] displayDirectoryContents(File dir) {
        File[] files = null;
        try {
            files = dir.listFiles();
            for (File file : files) {
                if (file.isDirectory()) {
                    System.out.println("directory:" + file.getCanonicalPath());
                    //recursive call to fetch file list in all levels of sub-directories
                    displayDirectoryContents(file); 
                } else {
                    System.out.println("     file:" + file.getCanonicalPath());
                }
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
        return files;
    }
    public static void readAndDeleteFiles(File[] fileList){
        BufferedReader br = null;
        for(File file : fileList){
            if (!file.isDirectory()){
                try {

                    String sCurrentLine;

                    br = new BufferedReader(new FileReader(file.getCanonicalPath()));
                    if (br != null){
                        System.out.println("Reading file : " + file.getCanonicalPath());

                        while ((sCurrentLine = br.readLine()) != null) {
                            System.out.println(sCurrentLine);
                        }

                        br.close();
                        System.out.println("Finished reading file : " + file.getCanonicalPath());
                    }

                    //deleting file
                    if(file.delete()){
                        System.out.println(file.getCanonicalPath() + " is deleted!");
                    }
                    else{
                        System.out.println(file.getCanonicalPath() + " could not be deleted!"); 
                    }

                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
            else{
                //recursive call to fetch file list in all levels of sub-directories and then read & delete each of them
                readAndDeleteFiles(file.listFiles());
            }
        }
    }

}

【讨论】:

  • 谢谢。效果很好。
【解决方案2】:

你可以使用类似下面的方法:

 public static void listFilesForFolder(File folder) {
     for (final File fileEntry : folder.listFiles()) {

        try {

            File newFile = new File(fileEntry.getName()));

            /*read the newFile whatever way you want to*/

           /* then after reading delete it */

            if(newFile.delete()){
              System.out.println("File is deleted");
            }else {
              System.out.println("Could not delete file");
            };


        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


        }
    }

您可以将文件夹名称按以下方式放置:

File newFile = new File("C://path//to//file//" + fileEntry.getName());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多