2016-09-22 1 views
-1

안녕하십니까.Java 감지 디렉토리

현재 디렉토리를 구문 분석해야하는 응용 프로그램을 유지 관리하고 있습니다. 응용 프로그램은 File.isDirectory()을 사용하여 주어진 경로가 디렉토리인지 또는 파일인지 여부를 감지 한 다음 포함 된 모든 파일과 하위 디렉토리를 재귀 적으로 가져옵니다.

디렉토리 이름에 공백이 없으면 C:\Foo\Bar과 같은 경로가 FooBar을 모두 감지하므로 원하는 동작입니다. C:\F oo\Bar과 같은 경로는 그렇지 않습니다. File.isDirectory()은(예 : File.isFile())을 이러한 경로에 반환합니다.
반면에 File.isAbsolute()true을 반환합니다. 따라서 파일 라이브러리에 따라 절대 경로이지만 파일이나 디렉토리는 아닙니다.

해결 방법이 있습니까? 주어진 경로가 디렉토리인지 아닌지를 탐지하는 대안은 무엇입니까? 아니면이 응용 프로그램을 공백없는 디렉토리에서만 실행해야합니까?

감사합니다.

편집 : 파일은 String으로 파일로 변환되고 5-6 회 이상의 메소드 호출 (내 코드 아님)으로 변환되는 다소 복잡한 프로세스로 생성됩니다. 어쨌든 문제의 근원을 찾았습니다. 내가 고칠거야.

이 질문을 삭제해야합니까? 나는 미래의 사용자들에게 매우 유용하다고 생각하지 않는다.

+2

일부 코드를 게시하십시오 - 어떻게'File' 객체를 만드십니까? – OldCurmudgeon

+1

공백과는 아무런 관련이 없습니다. Java File 클래스는 공백을 처리하는 방법을 알고 있으므로 코드 여야합니다. 당신이 어딘가에 손질을하고 있는지보십시오. – eladyanai

+0

C 드라이브에 "F oo"(이름에 공백이 있음)라는 폴더가 있다는 것을 이해하기 위해서입니까? 'File.exists()'는 무엇을 말합니까? –

답변

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

} 
} 
+0

이름에서 공백이있는 디렉토리를 디렉토리로 올바르게 식별하는 문제가 어떻게 해결되는지 알지 못합니다. –

1

Max os에서 사용해 보았습니다. 내가 is\\ space 내가 이런 식으로 공간이 유닉스 터미널 쇼 경로를 찾을 수 있다는 것입니다 노력하는 이유 다

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 

괜찮습니다.

어쩌면 Windows에서이 방법을 시도해 볼 수 있습니다.