簡體   English   中英

Java檢測目錄

[英]Java detecting directories

下午好。

我目前正在維護一個需要解析目錄的應用程序。 應用程序使用File.isDirectory()檢測給定路徑是目錄還是文件,然后遞歸獲取包含的所有文件和子目錄。

這是有效的,除非目錄名稱包含空格,因此像C:\\Foo\\Bar這樣的路徑將FooBar檢測為目錄,這是所需的行為; 但是像C:\\F oo\\Bar這樣的路徑不會: File.isDirectory() ) 在這樣的路徑上返回false (就像File.isFile() )。
另一方面,根據 File 庫, File.isAbsolute()返回true - 所以它是一個絕對路徑,但既不是文件也不是目錄。

有什么解決方法嗎? 檢測給定路徑是否是目錄的任何替代方法? 還是我注定只能在沒有空格的目錄上運行這個應用程序?

感謝您的關注。

編輯:文件是由一個相當曲折的過程創建的,涉及一個字符串被轉換為一個文件,返回一個字符串,然后通過 5-6 個方法調用(不是我的代碼)返回一個文件。 不管怎樣,我想我已經找到了問題的根源。 我會修好它。

我應該刪除這個問題嗎? 我不認為它對未來的用戶很有用。

我在 Max os 中嘗試過。 一切都好

File dir = new File("/Users/JinQi/Downloads/is space/foo");
File dir1 = new File("/Users/JinQi/Downloads/is\\ space/foo");
System.out.println(dir.isDirectory()); // true
System.out.println(dir1.isDirectory()); // false

為什么我嘗試is\\\\ space是因為我發現 unix 終端以這種方式顯示帶有空格的路徑。

也許你可以在 Windows 中嘗試這種方式。

今天我寫了一個代碼,用文件的路徑填充 JTable。 希望能幫助到你。

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.io.File;
import java.text.SimpleDateFormat;

import javax.swing.Icon;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.filechooser.FileSystemView;
import javax.swing.table.DefaultTableModel;

public class LeftPanel extends JPanel {

 private JTable table;
 private NavigationPanel backAndDriverPanel;

 private String[] columns = { "Path", "Size", "Last Modified" };
 private File file;
 private File[] filesNames;

 private final String DIR = "C:/";

 public LeftPanel() {

  Dimension dimension = getPreferredSize();
  dimension.width = 640;
  setPreferredSize(dimension);
  setLayout(new BorderLayout());

  // CREATING COMPONENTS
  table = new JTable();
  backAndDriverPanel = new NavigationPanel();

  table.setAutoCreateRowSorter(true);
  table.setFocusable(false);
  table.setRowSelectionAllowed(true);

  JScrollPane tableScroll = new JScrollPane(table);

  // ADDING COMPONENTS TO PANEL
  add(tableScroll, BorderLayout.CENTER);
  add(backAndDriverPanel, BorderLayout.PAGE_START);

  createTableModel();

 }

 public void createTableModel() {

  // DATE FORMAT
  SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");

  file = new File(DIR);

  filesNames = file.listFiles();

  DefaultTableModel model = (DefaultTableModel) table.getModel();
  model.setColumnIdentifiers(columns);

  // LIST OF ROWS
  Object[] row = new Object[3];
  for (int i = 0; i < filesNames.length; i++) {

   row[0] = filesNames[i].getAbsolutePath();
   row[1] = filesNames[i].length();

   // CONVERTING FROM MILISECONDS TO NORMAL DATE
   row[2] = sdf.format(filesNames[i].lastModified());

   model.addRow(row);
  }

  // SETING EDITABLE TO FALSE
  for (int i = 0; i < table.getColumnCount(); i++) {

   Class<?> col_clas = table.getColumnClass(i);
   table.setDefaultEditor(col_clas, null);
  }

 }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM