2016-12-30 7 views
0

파일에 잘못된 파일 목록을 반환하는 정규 경로의 새 인스턴스가 있습니다.FileInputStream이 파일을 찾을 수 없습니다.

FileNotFoundException이는

java.io.FileNotFoundException

를 발생 나는 또한을 FileReader

여전히
BufferedReader br = new BufferedReader(new FileReader(new File("C:\\Locations.txt"))); 

같은 결과 을 사용하려고했습니다

File file = new File("C:\\Locations.txt"); 
FileInputStream fis = new FileInputStream(file); 

자바 클래스 섹션. 이름은 콘솔 요청이 내가 구문 분석하는 것을 찾는다는 것이 문제가되지 않습니다. 거기에 어떤 의견이 있니?

+3

파일이 C 드라이브의 루트에 있는지 확실합니까? – Austin

+0

file.isFile()을 인쇄하십시오. 또한 File의 확장자를 확인하십시오. 확장의 경우에는이 문제가 발생할 수 있습니다. –

+0

@Austin 다른 위치에있는 경우 파일의 이름을 말하는 정보를 가져 오는 것은 불가능합니다. –

답변

0

여기에 당신을 도울 수있는 데모입니다 :

import java.io.File; 

public class FileDemo { 

public static void main(String[] args) { 
    File file = new File("C:\\test\\locations.txt"); 
    if (!file.exists()) { 
     System.out.println("does not exist."); 
     return; 
    } 
    if(file.isFile() && file.canRead()) { 
     System.out.println(file.getName()+ " can be read from."); 
} 
if (file.isDirectory()) { 
     System.out.println(file.getPath()+" is a directory containing..."); 
     String[] files = file.list(); 
     for (String file1 : files) { 
      System.out.println(file1); 
     } 
    } 
    } 
} 

것들을 깨끗하게 만들기 위해 시도 캐치를 넣습니다.

import java.io.File; 

public class FileDemo { 

public static void main(String[] args) { 
File file = new File(args[0]); 
if (!file.exists()) { 
    System.out.println("File does not exist."); 
    return; 
} 
if(file.isFile() && file.canRead()) { 
    System.out.println(file.getName()+ " can be read from."); 
} 
if (file.isDirectory()) { 
    System.out.println(file.getPath()+" is a directory containing..."); 
String[] files = file.list(); 
    for (String file1 : files) { 
     System.out.println(file1); 
    } 
} 
} 
} 
0

당신은 문제 실제로 경로 것을 어떤 식 으로든를 찾을 수 : 그리고 그 파일을 인수로 제공 될 것입니다 확신 콘솔 테스트를하고있는 경우가 여기에 방법입니다.

경로는 다음과 같은 추론에 의해 절대 경우 Windows에서 파일을 열 수 FileInputStream 시도, 그것을 확인하는 경우 : 처음 두 문자가 '\\' 경우

  • - UNC 절대 경로
  • 2 문자의 경우 ':'이고 세 번째 문자는 '\\' - 드라이브 이름이있는 절대 경로입니다.

경로가 절대적이며 너무 길지 않은 경우 Windows OS로 전달되어 파일을 엽니 다. 여기에는 파일이 실제로 존재하는지 확인하는 (최종적인) 점검이 포함됩니다.

(위의 설명은 자바 (8)의 오픈 JDK 소스 트리에서 Windows 용 FileInputStream.open0 ...의 네이티브 코드 구현을위한의 C 소스 코드의 내 독서를 기반으로) 당신이 제공 한 절대 경로 (휴리스틱에 따라)와 너무 길지 않습니다. 따라서 문제는 Windows 자체에서 파일이 존재하지 않는다고 생각해야합니다.

관련 문제