Java检测目录

时间:2016-09-22 13:35:51

标签: java directory

下午好。

我目前正在维护一个需要解析目录的应用程序。 应用程序使用File.isDirectory()来检测给定路径是目录还是文件,然后以递归方式提取所有包含的文件和子目录。

这是有效的,除非目录名称包含空格,因此像C:\Foo\Bar这样的路径会将FooBar都检测为目录,这是所需的行为;但C:\F oo\Bar之类的路径不会:File.isDirectory()在此路径上返回falseFile.isFile()}。) 另一方面,File.isAbsolute()返回true - 所以它是一个绝对路径,但根据文件库,它既不是文件也不是目录。

有没有解决方法?检测给定路径是否为目录的任何替代方法?或者我注定只在没有空格的目录上运行这个应用程序?

感谢您的关注。

编辑:文件是由一个相当曲折的过程创建的,其中一个字符串被转换为一个文件回一个字符串,然后返回一个5-6方法调用的文件(不是我的代码)。 无论如何,我认为我找到了问题的根源。我会解决它。

我应该删除这个问题吗?我不认为它对未来的用户非常有用。

2 个答案:

答案 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);
  }

 }
}