Ява.ленг.IllegalArgumentException: содержит разделитель пути


у меня есть имя файла в моем коде как:

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

Я получаю сообщение об ошибке на 2-й линии :

05-11 16:49:06.355: ошибка / AndroidRuntime (4570): вызвано: java.ленг.IllegalArgumentException: File//sdcard / / imageq.png содержит разделитель пути

Я пробовал этот формат также:

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

7 ответов:

этот метод открывает файл в частной области данных приложения. Вы не можете открыть файлы в подкаталогах в этой области или из совершенно других областей с помощью этого метода. Так что используйте конструктор FileInputStream непосредственно передать путь с каталогом в нем.

решение:

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

метод openFileInput не принимает разделители путей.

Не забудьте

fis.close();

в конце.

openFileInput() не принимает пути, только имя файла если вы хотите получить доступ к пути, используйте File file = new File(path) и тегом FileInputStream

вы не можете использовать путь с разделителями директорий напрямую, но вы нужно сделать файловый объект для каждого каталога.

Примечание: этот код делает каталоги, ваш может не понадобиться...

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

Я решил этот тип ошибки, создав каталог в событии onCreate, а затем получив доступ к каталогу, создав новый объект file в методе, который должен сделать что-то вроде сохранения или извлечения файла в этом каталоге, надеюсь, это поможет!

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

я получил сообщение об ошибке выше при попытке получить доступ к файлу из внутренней памяти с помощью openFileInput("/Dir/data.txt") метод с поддиректорию Dir.

вы не можете получить доступ к подкаталогам с помощью вышеуказанного метода.

попробуйте что-то вроде:

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