Я делаю 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, даже если в каталоге несколько файлов.