Мой ArrayList не возвращает правильный вывод (необходимо записать каталог файла в файл CSV) - PullRequest
1 голос
/ 14 октября 2019

Я делаю Java-программу, которая печатает каталог файлов на моем компьютере. У меня есть 3 класса, класс MyFile (для записи в файл), класс ListFiles (для извлечения файлов и атрибутов каталога) и класс Folder (для создания объекта папки конкретногоадрес каталога). Мой вывод выдает все правильно, за исключением того факта, что он не записывает в мой CSV-файл, и мой минимум и максимум либо одинаковы, либо минимум равен 0. Я программировал Java только 8 месяцев, так что я уверен, что этопростое решение для большинства людей, но я не уверен, с чего начать с моей логической ошибки. Я ценю все отзывы и спасибо! Вот мой код

Я создал три массива списков для извлечения содержимого моего каталога и, по сути, для записи его в файл csv. Я также попытался инициализировать мои минимальные и максимальные переменные различными значениями, чтобы получить правильный размер.

public class ListFiles {
    ArrayList<Folder> theFolder = new ArrayList();

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        ///call ListFiles
        new ListFiles();


    }

    ////ListFiles method to print whether it exists 
    public ListFiles() {

        String dname = JOptionPane.showInputDialog("Please enter a path for folder: ");
        File f = new File(dname);
        if (f.exists()) {
            System.out.println("Exists");
            showFiles(dname, " ");

       ArrayList<String> callShowFiles = showFiles(dname, " ");
       ArrayList<Folder> callGetDirectoryInfo = getDirectoryInfo(callShowFiles);
       ArrayList<String> callGetFolderInfo = getFolderInfo(callGetDirectoryInfo); 
       MyFile.myFileWriter(callGetFolderInfo, "FileDirectory.csv");
        } else {
            System.out.println("Does not exist");

        }
    }

    ///show files (find child file name, parent file name, extensions, subfolder count, min, max, and avg of files
    public ArrayList<String> showFiles(String dirName, String idn) {

        System.out.println("START ------------------------");

        //create indent
        String indent = idn;
        ///create new file for direcctory name
        File file = new File(dirName);
        ///create index for dirName (lastIndexOf) to print out the last thing 

        int index = dirName.lastIndexOf('\\');

        ///get and print name of parent file
        File fileParent = file.getParentFile();
        Folder folder = new Folder(dirName.substring(index + 1));
        folder.setParent(fileParent.getPath());
        int indexForParent = folder.getParent().lastIndexOf("\\");
        folder.parent = folder.getParent().substring(indexForParent);

        ///find amount of subfolders
        if (file.isDirectory()) {
            folder.folderCount = file.list().length;
            System.out.println("Subfolder Count:" + folder.folderCount);
            ///folder.name = name
            folder.name = name;
            String[] files = file.list();
            for (int i = 0; i < files.length; i++) {

                File childFile = new File(dirName + "\\" + files[i]);
                //int folderCount, int max, int avg, int min, String parent, String name, int totalSize, int fileCount, int xl, int ppt, int doc

                if (childFile.isDirectory()) {
                    showFiles(dirName + "\\" + files[i], indent + " ");

                } else {

                    ///if the file count is 0, it is a file
                }
                if (folder.fileCount == 0) {
                    folder.fileCount++;
                    ///set size to length of childfile
                    int size = (int) childFile.length();

                    ///set min, max, and totalsize to size
                    folder.min = size;
                    folder.max = size;
                    folder.totalSize = size;

                    ///if max is less than current size, max = size
                    if (folder.getMax() < size) {
                        folder.setMax(size);
                        // folder.fileCount++;

                        ///if min is greater than current size, min == size
                    } else if (folder.getMin() > size) {
                        folder.setMin(size);
                        //folder.fileCount++;
                    } else {
                        ////else fileCount increases and totalSIze increases
                        folder.fileCount++;
                        //folder.totalSize += size;
                    }

                }
            }
        }


String folders =("Name: "+folder.name+"\nParent: "+ folder.parent+"\nFolder Count: "+ folder.folderCount+"\nFile Count: "+ folder.fileCount
       +"\nTotal Size: "+folder.totalSize+"\nMin: "+ folder.min+"\nMax: "+folder.max+"\nAvg: "+ folder.avg
      +"\nDocs: "+folder.doc+"\nXl: "+ folder.xl+"\nPpt: "+ folder.ppt);
                      ArrayList <String> print = new ArrayList();
                       print.add(folders);

        System.out.println("END ------------------------\n");
        return print;


    }
     public ArrayList<Folder> getDirectoryInfo(ArrayList<String> list){
        ArrayList<Folder> emp = new ArrayList();
        for(int i = 1; i< list.size(); i++){
            String str = list.get(i);
            String fields[] = str.split(",");

            Folder e =new Folder(fields[0].trim(),
                        fields[1].trim(),
                        Integer.parseInt(fields[2].trim()),Integer.parseInt(fields[3].trim()),Integer.parseInt(fields[4].trim()),
                        Integer.parseInt(fields[5].trim()),Integer.parseInt(fields[6].trim()),Integer.parseInt(fields[7].trim()),
                        Integer.parseInt(fields[8].trim()),Integer.parseInt(fields[9].trim()),Integer.parseInt(fields[10].trim()));


            emp.add(e);
     }
        ///takes a string arraylist and returns folder list of fields to be wrote to csv file
        return emp;
    }


      public ArrayList<String> getFolderInfo(ArrayList<Folder> emp){
        ArrayList<String> stringFiles = new ArrayList();
        stringFiles.add("Testing");
        for(int i = 0; i < emp.size(); i++){
            String str = emp.get(i).getName() + " , " +emp.get(i).getParent() + " , " + emp.get(i).getFolderCount() + " , "+emp.get(i).getFileCount()
                    + " , " + emp.get(i).getTotalSize()+" , "+emp.get(i).getMin()+" , "+emp.get(i).getMax()
                    +" , "+emp.get(i).getAvg() + " , "+emp.get(i).getDoc() + " , "+emp.get(i).getXl()+" , "+emp.get(i).getPpt();
            stringFiles.add(str);
            System.out.println(str);
        }
        return stringFiles;
    }

}

Вот мой класс папок

public class Folder {

    String name;
    String parent;
    int folderCount;
    int fileCount;
    int totalSize;
    int min, max, avg;
    int doc, xl, ppt;

    public Folder(String name) {
        this.name = name;
    }

    public Folder(String name, String parent, int folderCount, int fileCount, int totalSize, int min, int max, int avg, int doc, int xl, int ppt) {
        this.name = name;
        this.parent = parent;
        this.folderCount = folderCount;
        this.fileCount = fileCount;
        this.totalSize = totalSize;
        this.min = min;
        this.max = max;
        this.avg = avg;
        this.doc = doc;
        this.xl = xl;
        this.ppt = ppt;
    }

    public int getFileCount() {
        return fileCount;
    }

    public void setFileCount(int fileCount) {
        this.fileCount = fileCount;
    }

    public int getTotalSize() {
        return totalSize;
    }

    public void setTotalSize(int totalSize) {
        this.totalSize = totalSize;
    }

    public int getDoc() {
        return doc;
    }

    public void setDoc(int doc) {
        this.doc = doc;
    }

    public int getXl() {
        return xl;
    }

    public void setXl(int xl) {
        this.xl = xl;
    }

    public int getPpt() {
        return ppt;
    }

    public void setPpt(int ppt) {
        this.ppt = ppt;
    }

    public int getFolderCount() {
        return folderCount;
    }

    public void setFolderCount(int folderCount) {
        this.folderCount = folderCount;
    }

    public int getMin() {
        return min;
    }

    public void setMin(int min) {
        this.min = min;
    }

    public int getMax() {
        return max;
    }

    public void setMax(int max) {
        this.max = max;
    }

    public int getAvg() {
        return avg;
    }

    public void setAvg(int avg) {
        this.avg = avg;
    }

    public String getParent() {
        return parent;
    }

    public void setParent(String parent) {
        this.parent = parent;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }



}

А вот мой класс MyFile (я на 100% уверен, что код для этого корректен, хотя это должно быть ошибкой вListFiles)


public class MyFile {

    public static ArrayList myFileReader(String fname) {

        ArrayList<String> myList = new ArrayList();
        try {
            File file = new File(fname);
            BufferedReader br = new BufferedReader(new FileReader(fname));
            String st;
            while ((st = br.readLine()) != null) {
                myList.add(st);
            }
            br.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return myList;
    }

    public static void myFileWriter(ArrayList<String> list, String fname){
        try {
            File file = new File(fname);
            PrintWriter pw = new PrintWriter(fname);
            for(int i = 0; i < list.size(); i++){
                pw.println(list.get(i));
            }
            pw.close();
        }catch (Exception e) {
            e.printStackTrace();
        }
    } 
}

Я ожидаю, что он напечатает все поля / выходные данные моего файлового каталога (родитель, имя, общий размер, количество папок, мин / макс и т. Д.) В файл .csv ичтобы минимальный размер был меньше максимального размера. Единственное, что записывается в файл my.csv - это «Тестирование», и мой минимальный размер совпадает с моим максимальным размером или 0, даже если в каталоге несколько файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...