java.lang.IllegalArgumentException : 경로 구분 기호 포함


79

내 코드에 다음과 같은 파일 이름이 있습니다.

String NAME_OF_FILE="//sdcard//imageq.png";
FileInputStream fis =this.openFileInput(NAME_OF_FILE); // 2nd line

두 번째 줄에 오류가 발생합니다.

05-11 16 : 49 : 06.355 : ERROR / AndroidRuntime (4570) : 원인 : java.lang.IllegalArgumentException : 파일 //sdcard//imageq.png에 경로 구분 기호가 있습니다.

이 형식도 시도했습니다.

String NAME_OF_FILE="/sdcard/imageq.png";

답변:


58

이 메서드는 응용 프로그램의 개인 데이터 영역에서 파일을 엽니 다. 이 영역의 하위 디렉터리 또는이 방법을 사용하여 완전히 다른 영역의 파일을 열 수 없습니다. 따라서의 생성자를 FileInputStream직접 사용하여 디렉토리가있는 경로를 전달하십시오.


46
이에 대한 몇 가지 예를 제공하십시오
아난드 Savjani

11
귀하의 대답은 혼란 스럽습니다. 영업 이익은 FileInputStream 객체를 사용
FracturedRetina

7
예제 제공
Lutaaya Huzaifah Idris

2
답변에 대해 설명해주십시오.
IgorGanapolsky

1
이것은 잘못된 대답입니다 – 아래 답변을 참조하십시오
bharal

81

해결책은 다음과 같습니다.

FileInputStream fis = new FileInputStream (new File(NAME_OF_FILE));  // 2nd line

openFileInput 메서드는 경로 구분 기호를 허용하지 않습니다.

잊지 마세요

fis.close();

끝에.


FileInputStream이렇게 사용할 수 있다는 점을 감안할 때 왜 사용을 선택 openFileInput합니까?
Al Lelopath

1
이것은 명확한 예를 제공하기 때문에 올바르게 표시된 답변이어야합니다.
marienke

간단한 솔루션이 가장 좋습니다. 감사.
Danger

30

openFileInput()경로를 허용하지 않고 경로에 액세스하려는 경우 파일 이름 만 사용 File file = new File(path)하고 해당FileInputStream


40
이것을 달성하기 위해 샘플 코드를 제공했다면 좋을 것입니다!
Muhammad Babar

2
@MuhammadBabar 물론 코드가 필요합니다. 누군가 제공하지 않으면 항상 코드를 작성할 수는 없습니다. 아마도 문서를 확인 하시겠습니까?
Neon Warge

3

openFileInput("/Dir/data.txt")하위 디렉터리가있는 방법을 사용하여 내부 저장소에서 파일에 액세스하는 동안 위의 오류 메시지가 나타납니다.Dir .

위의 방법으로는 하위 디렉터리에 액세스 할 수 없습니다.

다음과 같이 시도하십시오.

FileInputStream fIS = new FileInputStream (new File("/Dir/data.txt"));

2

디렉토리 구분 기호가있는 경로를 직접 사용할 수는 없지만 모든 디렉토리에 대해 파일 객체를 만들어야합니다.

참고 :이 코드는 디렉토리를 생성하므로 필요하지 않을 수 있습니다.

File file= context.getFilesDir();
file.mkdir();

String[] array=filePath.split("/");
for(int t=0; t< array.length -1 ;t++)
{
    file=new File(file,array[t]);
    file.mkdir();
}

File f=new File(file,array[array.length-1]);

RandomAccessFileOutputStream rvalue = new RandomAccessFileOutputStream(f,append);

5
뭐 ? File f = new File(fileDirPath); f.mkdirs();편집하십시오
Mr_and_Mrs_D

1
String all = "";
        try {
            BufferedReader br = new BufferedReader(new FileReader(filePath));
            String strLine;
            while ((strLine = br.readLine()) != null){
                all = all + strLine;
            }
        } catch (IOException e) {
            Log.e("notes_err", e.getLocalizedMessage());
        }

0
File file = context.getFilesDir(); 
file.mkdir();
String[] array = filePath.split("/"); 
for(int t = 0; t < array.length - 1; t++) {
    file = new File(file, array[t]); 
    file.mkdir();
}
File f = new File(file,array[array.length- 1]); 
RandomAccessFileOutputStream rvalue = 
    new RandomAccessFileOutputStream(f, append);

이전 답변과 동일한 답변입니다.
Anis LOUNIS

0

onCreate 이벤트에서 디렉터리를 만든 다음 해당 디렉터리에서 파일을 저장하거나 검색하는 등의 작업을 수행해야하는 메서드에서 새 파일 개체를 만들어 디렉터리에 액세스하여 이러한 유형의 오류를 해결했습니다. 도움이 되었기를 바랍니다.

 public class MyClass {    

 private String state;
 public File myFilename;

 @Override
 protected void onCreate(Bundle savedInstanceState) {//create your directory the user will be able to find
    super.onCreate(savedInstanceState);
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        myFilename = new File(Environment.getExternalStorageDirectory().toString() + "/My Directory");
        if (!myFilename.exists()) {
            myFilename.mkdirs();
        }
    }
 }

 public void myMethod {

 File fileTo = new File(myFilename.toString() + "/myPic.png");  
 // use fileTo object to save your file in your new directory that was created in the onCreate method
 }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.