下午好。
我目前正在维护一个需要解析目录的应用程序。
应用程序使用File.isDirectory()
来检测给定路径是目录还是文件,然后以递归方式提取所有包含的文件和子目录。
这是有效的,除非目录名称包含空格,因此像C:\Foo\Bar
这样的路径会将Foo
和Bar
都检测为目录,这是所需的行为;但C:\F oo\Bar
之类的路径不会:File.isDirectory()
在此路径上返回false
(File.isFile()
}。)
另一方面,File.isAbsolute()
返回true
- 所以它是一个绝对路径,但根据文件库,它既不是文件也不是目录。
有没有解决方法?检测给定路径是否为目录的任何替代方法?或者我注定只在没有空格的目录上运行这个应用程序?
感谢您的关注。
编辑:文件是由一个相当曲折的过程创建的,其中一个字符串被转换为一个文件回一个字符串,然后返回一个5-6方法调用的文件(不是我的代码)。 无论如何,我认为我找到了问题的根源。我会解决它。
我应该删除这个问题吗?我不认为它对未来的用户非常有用。
答案 0 :(得分:1)
我在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中尝试这种方式。
答案 1 :(得分:-1)
今天我写了一个用文件路径填充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);
}
}
}