Java.lang.IllegalArgumentException: содержит разделитель путей
У меня есть имя файла в моем коде:
String NAME_OF_FILE="//sdcard//imageq.png";
FileInputStream fis =this.openFileInput(NAME_OF_FILE); // 2nd line
Я получаю сообщение об ошибке 2-й строки:
05-11 16: 49: 06.355: ERROR/AndroidRuntime (4570): вызвано: java.lang.IllegalArgumentException: Файл //sdcard//imageq.png содержит разделитель путей
Я также пробовал этот формат:
String NAME_OF_FILE="/sdcard/imageq.png";
Ответы
Ответ 1
Этот метод открывает файл в частной области данных приложения. Вы не можете открывать файлы в подкаталогах в этой области или из других областей, используя этот метод. Поэтому используйте конструктор FileInputStream
напрямую, чтобы передать путь с каталогом в нем.
Ответ 2
Решение:
FileInputStream fis = new FileInputStream (new File(NAME_OF_FILE)); // 2nd line
Метод openFileInput не принимает разделители путей.
Не забывайте
fis.close();
в конце.
Ответ 3
openFileInput()
не принимает пути, только имя файла
если вы хотите получить доступ к пути, используйте File file = new File(path)
и соответствующий FileInputStream
Ответ 4
Вы не можете использовать путь с разделителями каталогов напрямую, но вы
необходимо создать файл файл для каждого каталога.
ПРИМЕЧАНИЕ. Этот код создает каталоги, вам может не понадобиться...
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 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);
Ответ 6
Я решил этот тип ошибки, создав каталог в событии 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
}
}
Ответ 7
Я получил вышеуказанное сообщение об ошибке при попытке доступа к файлу из внутреннего хранилища с использованием метода openFileInput("/Dir/data.txt")
с подкаталогом Dir
.
Вы не можете получить доступ к подкаталогам, используя вышеуказанный метод.
Попробуйте что-нибудь вроде:
FileInputStream fIS = new FileInputStream (new File("/Dir/data.txt"));