EBADF (Mauvais numéro de fichier) sur inputstream I/O

J'ai cette erreur

java.io.IOException: lecture a échoué: EBADF (Mauvais numéro de fichier)

sur cette ligne de code:

 while ((input = fis.read(buffer)) != -1) {

Que pensez-vous serait la cause de cette EBADF le mauvais numéro de fichier d'erreur sur cette ligne? Toutes les idées sur la façon de le résoudre. Je voulais juste un flux de travail pour lire le fichier PDF à partir de la carte SD et les lire de nouveau mis sur la carte SD de nouveau avec un nom différent.

Trace de la pile

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)

Le reste du code

        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();
}
}
}
Probablement en lien: stackoverflow.com/questions/14584755/...
Vous avez déjà posté plus ou moins la même question il y a quelques jours - stackoverflow.com/questions/17525255/...
j'ai fait des modifications au code et il n'a toujours pas de travail donc je voulais voir si je pouvais obtenir aucune nouvelle des commentaires sur cet exemple de code, je pensais que c'était fini il y a une semaine
JAMAIS l'utilisation codé en dur filepaths. Vous devez utiliser Environment.getExternalStorageDirectory() à la place.
flush() avant close() est redondante.

OriginalL'auteur Kevik | 2013-07-15