我對編程很陌生,事實上我剛完成學業,剛開始在 IT 部門作業,直到幾個月后我開始上大學。
但是,我的任務是制作一個將檔案從一個檔案夾復制到另一個檔案夾的程式,除了選擇檔案之外,用戶在其中沒有太大影響。我得到了一切作業,但現在我被要求實施它,以便只有上周的檔案顯示在 FileChooser 中。
就個人而言,我假設我以某種方式(帶有陣列的問題?)必須檢查所有檔案的日期并將其與當前日期進行比較。我想我會用for回圈來做。
但老實說,我不知道如何處理它。我認為主要問題是我不知道如何提前從目錄中獲取檔案并通過回圈發送它們。
任何幫助,將不勝感激。如果您需要更多資訊,請告訴我。
先感謝您。
uj5u.com熱心網友回復:
您只需要為您的JFileChooser創建一個自定義過濾器類來執行您想要的操作。通常,您可以通過提供檔案擴展名和檔案描述(但是還有其他變體)將一個或多個過濾器應用于檔案選擇器實體。通過創建您自己的過濾器類,您可以讓它顯示您喜歡的任何檔案,并在您想要的任何情況下顯示。
下面是一個自定義 JFileChooser 檔案過濾器的示例。有了它,您可以宣告一個過濾器,該過濾器將只顯示具有任何檔案擴展名的任何檔案,這些檔案的檔案日期從當前日期到之前提供的任何日期(日期范圍)。這是自定義 JFileChooser 過濾器類:
public class MyFileChooserFileFilter extends javax.swing.filechooser.FileFilter {
private String extension;
private String description;
private int daysBefore = 0;
public MyFileChooserFileFilter(String extension, String description) {
this.extension = extension;
this.description = description;
}
public MyFileChooserFileFilter(String extension, String description, int daysBefore) {
this.extension = extension;
this.description = description;
this.daysBefore = daysBefore;
}
public MyFileChooserFileFilter(int daysBefore) {
this.daysBefore = daysBefore;
}
@Override
public boolean accept(File file) {
if (file.isDirectory()) {
return true;
}
if (this.daysBefore > 0) {
// Get the file's date and convert it to LocalDate
java.time.LocalDate fileDate = java.time.Instant.ofEpochMilli(file.lastModified())
.atZone(java.time.ZoneId.systemDefault()).toLocalDate();
// Get current Date as LocalDate. This will be considered the End Date.
java.time.LocalDate fileEndDate = java.time.LocalDate.now();
/* Get Date from the supplied number of days ago as LocalDate.
This will be sonsidered the Start Date. */
java.time.LocalDate fileStartDate = fileEndDate.minusDays(this.daysBefore);
/* Chaeck if the file's date is in range. If it isn't then don't
display it within the JDateChooser. If it is then display it. */
if ((fileDate.isBefore(fileEndDate) || fileDate.isEqual(fileEndDate)) &&
(fileDate.isEqual(fileStartDate) || fileDate.isAfter(fileStartDate)) &&
(file.getName().endsWith(extension))) {
/* If the file name has our desired file name extension and the
file date in within our date range then return true to indicate
the file is acceptable and can be displayed. */
return true;
}
/* Otherwise it is not acceptable for this current filter instance
and therefore return false so as not to display the file name.*/
else {
return false;
}
}
// For other filter type instances.
return file.getName().endsWith(extension);
}
@Override
public String getDescription() {
return description String.format(" (*%s)", extension);
}
}
以下是您可以如何將此類與您的JFileChooser一起使用:
javax.swing.JFileChooser fileChooser = new javax.swing.JFileChooser();
fileChooser.setCurrentDirectory(new File(""));
fileChooser.setFileSelectionMode(javax.swing.JFileChooser.FILES_ONLY);
javax.swing.filechooser.FileFilter txtFilter = new MyFileChooserFileFilter(".txt", "Text Files From Last 6 Days", 6);
javax.swing.filechooser.FileFilter allTxtFilter = new MyFileChooserFileFilter(".txt", "All Text Files");
javax.swing.filechooser.FileFilter docFilter = new MyFileChooserFileFilter(".docx", "Microsoft Word Documents");
javax.swing.filechooser.FileFilter pdfFilter = new MyFileChooserFileFilter(".pdf", "PDF Documents");
javax.swing.filechooser.FileFilter xlsFilter = new MyFileChooserFileFilter(".xlsx", "Microsoft Excel Documents");
fileChooser.addChoosableFileFilter(txtFilter);
fileChooser.addChoosableFileFilter(allTxtFilter);
fileChooser.addChoosableFileFilter(docFilter);
fileChooser.addChoosableFileFilter(pdfFilter);
fileChooser.addChoosableFileFilter(xlsFilter);
fileChooser.setAcceptAllFileFilterUsed(true);
int result = fileChooser.showOpenDialog(this);
if (result == javax.swing.JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
System.out.println("Selected file: " selectedFile.getAbsolutePath());
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/496826.html