[英]Detecting directories opened by java.lang.Class.getResourceAsStream()
[英]Java detecting directories
下午好。
我目前正在維護一個需要解析目錄的應用程序。 應用程序使用File.isDirectory()
檢測給定路徑是目錄還是文件,然后遞歸獲取包含的所有文件和子目錄。
這是有效的,除非目錄名稱包含空格,因此像C:\\Foo\\Bar
這樣的路徑將Foo
和Bar
檢測為目錄,這是所需的行為; 但是像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.