EBADF (Bad file number) auf inputstream I/O
Habe ich diesen Fehler
java.io.IOException: Lesen fehlgeschlagen: EBADF (Bad file number)
auf dieser code-Zeile:
while ((input = fis.read(buffer)) != -1) {
Was denken Sie, würde dies dazu führen, EBADF bad file number Fehler in dieser Zeile? Irgendwelche Ideen auf, wie man es beheben. Ich wollte nur einen funktionierenden stream zu Lesen in der PDF-Datei von der SD Lesen und setzen wieder auf die SD-Karte wieder mit einem anderen Namen.
Stack-trace
07-15 18:47:38.952: W/System.err(2220): java.io.IOException: read failed: EBADF (Bad file number)
07-15 18:47:38.962: W/System.err(2220): at libcore.io.IoBridge.read(IoBridge.java:432)
07-15 18:47:38.962: W/System.err(2220): at Java.io.FileInputStream.read(FileInputStream.java:179)
07-15 18:47:38.962: W/System.err(2220): at java.io.InputStream.read(InputStream.java:163)
07-15 18:47:38.962: W/System.err(2220): at com.example.fileionottext.MainActivity.pdfInAndOut(MainActivity.java:95)
07-15 18:47:38.962: W/System.err(2220): at com.example.fileionottext.MainActivity$1.onClick(MainActivity.java:47)
07-15 18:47:38.962: W/System.err(2220): at android.view.View.performClick(View.java:3531)
07-15 18:47:38.962: W/System.err(2220): at android.view.View$PerformClick.run(View.java:14224)
07-15 18:47:38.962: W/System.err(2220): at android.os.Handler.handleCallback(Handler.java:605)
07-15 18:47:38.962: W/System.err(2220): at android.os.Handler.dispatchMessage(Handler.java:92)
07-15 18:47:38.962: W/System.err(2220): at android.os.Looper.loop(Looper.java:137)
07-15 18:47:38.962: W/System.err(2220): at android.app.ActivityThread.main(ActivityThread.java:4699)
07-15 18:47:38.962: W/System.err(2220): at java.lang.reflect.Method.invokeNative(Native Method)
07-15 18:47:38.962: W/System.err(2220): at java.lang.reflect.Method.invoke(Method.java:511)
07-15 18:47:38.962: W/System.err(2220): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
Den rest des Codes
public void pdfInAndOut() throws FileNotFoundException, IOException
{
try {
FileOutputStream fos = null;
File file2;
file2 = new File("/mnt/sdcard/replacementPdf.pdf");
//String fileName = "testerPDFCopy.pdf";
try {
if (!file2.exists()) {
file2.createNewFile();
}
fos = new FileOutputStream(file2);
}
catch (Exception e1) {
//TODO Auto-generated catch block
e1.printStackTrace();
}
FileInputStream fis = null;
byte[] buffer = new byte[888192];
File fileIn;
fileIn = new File("/mnt/sdcard/tempPdf.pdf");
fis = new FileInputStream(fileIn);
int input = 0;
while ((input = fis.read(buffer)) != -1) { //<<-- STACK TRACE ERROR
fos.write(buffer, 0, input);
Log.i("<<<<<>>>>", "fos2 is is; " + buffer[7]);
try {
fos.flush();
fos.close();
fis.close();
}
catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
}
textViewOne.setText(String.valueOf(input));
}
catch (Exception e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Wahrscheinlich im Zusammenhang: stackoverflow.com/questions/14584755/...
Sie schon gepostet, mehr oder weniger die gleiche Frage vor ein paar Tagen - stackoverflow.com/questions/17525255/...
ich machte änderungen am code und es immer noch nicht funktionieren, so wollte ich sehen, ob ich bekommen konnte jedes neue feedback auf diesen code, ich dachte, das war über eine Woche her
NIE verwenden hardcoded filepaths. Müssen Sie
Sie schon gepostet, mehr oder weniger die gleiche Frage vor ein paar Tagen - stackoverflow.com/questions/17525255/...
ich machte änderungen am code und es immer noch nicht funktionieren, so wollte ich sehen, ob ich bekommen konnte jedes neue feedback auf diesen code, ich dachte, das war über eine Woche her
NIE verwenden hardcoded filepaths. Müssen Sie
Environment.getExternalStorageDirectory()
statt.flush()
vor close()
redundant ist.
InformationsquelleAutor Kevik | 2013-07-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Entweder muss ein
}
, richtig? Oder diefis.close
ausgeführt wird, und ein Fehler wird auftreten.Ich weiß, der Letzte Teil des Codes fehlt.Was ich meine ist die "}"nach" fos.write(buffer, 0, input);" wenn es nicht ist,während der Satz enthält den code fis.close(),wenn der stream geschlossen ist,EBADF ist im Begriff, auftreten.
ja!!!!!!! es funktioniert jetzt. kein Fehler mehr!!!! ich bin in der Lage, schreiben Sie eine pdf-Datei Binär-Datei auf die SD-Karte und Lesen Sie es zurück. ich glaube nicht, der Fehler war so ein einfacher Fehler, dass ich ÜBERSEHEN.
ja,nur ein einfacher Fehler.:)
und @Kevik , eine Erinnerung daran, dass mit richtige Einrückung ist mehr als nur Kosmetik ...
InformationsquelleAutor tianwei