Mam w kodzie nazwę pliku:
String NAME_OF_FILE="//sdcard//imageq.png";
FileInputStream fis =this.openFileInput(NAME_OF_FILE); // 2nd line
W drugiej linii pojawia się błąd:
05-11 16: 49: 06.355: ERROR / AndroidRuntime (4570): Spowodowane przez: java.lang.IllegalArgumentException: Plik //sdcard//imageq.png zawiera separator ścieżki
Próbowałem również tego formatu:
String NAME_OF_FILE="/sdcard/imageq.png";
Rozwiązaniem jest:
FileInputStream fis = new FileInputStream (new File(NAME_OF_FILE)); // 2nd line
Metoda openFileInput nie akceptuje separatorów ścieżek.
Nie zapomnij
fis.close();
na końcu.
źródło
FileInputStream
ten sposób, po co wybieraćopenFileInput
?openFileInput()
nie akceptuje ścieżek, tylko nazwę pliku, jeśli chcesz uzyskać dostęp do ścieżki, użyjFile file = new File(path)
i odpowiadającegoFileInputStream
źródło
Otrzymałem powyższy komunikat o błędzie podczas próby uzyskania dostępu do pliku z pamięci wewnętrznej przy użyciu
openFileInput("/Dir/data.txt")
metody z podkatalogiemDir
.Nie możesz uzyskać dostępu do podkatalogów za pomocą powyższej metody.
Spróbuj czegoś takiego:
FileInputStream fIS = new FileInputStream (new File("/Dir/data.txt"));
źródło
Nie możesz bezpośrednio użyć ścieżki z separatorami katalogów, ale będziesz musiał utworzyć obiekt plikowy dla każdego katalogu.
UWAGA: Ten kod tworzy katalogi, twój może tego nie potrzebować ...
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);
źródło
File f = new File(fileDirPath); f.mkdirs();
Proszę edytować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()); }
źródło
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);
źródło
Rozwiązałem ten typ błędu, tworząc katalog w zdarzeniu onCreate, a następnie uzyskując dostęp do katalogu, tworząc nowy obiekt pliku w metodzie, która musi wykonać coś takiego, jak zapisanie lub pobranie pliku w tym katalogu, mam nadzieję, że to pomoże!
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 } }
źródło