我正在使用下面的代碼將文件鏈接到資源文件夾並閱讀文件和書寫,然後我通過第三方應用程序打開PDF文件。PDF文件不能使用類加載器打開
這是我的代碼;
public void readFile(){
InputStream fileInputStream= null;
String filePath = "PDF/" + name + ".pdf";
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
try {
fileInputStream = classLoader.getResourceAsStream(filePath);
int size = fileInputStream.available();
byte[] buffer = new byte[size];
fileInputStream.read(buffer);
fileInputStream.close();
writeFile(buffer, name);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void writeFile(byte[] buffer, String fileName){
try {
File root = Environment.getExternalStorageDirectory();
FileOutputStream fileOutputStream = null;
if (root.canWrite()){
File pdffile = new File("/sdcard/aaa/bbb");
pdffile.mkdirs();
System.out.println(" pdf path "+pdffile.toString());
File outputFile = new File(pdffile.toString());
fileOutputStream = new FileOutputStream(
outputFile+"/" + fileName + ".pdf");
BufferedOutputStream bos = new BufferedOutputStream(
fileOutputStream);
bos.write(buffer);
bos.flush();
bos.close();
}
} catch (IOException e) {
Log.e("Rrror", "Could not write file " + e.getMessage());
}
}
File f = new File("/sdcard/aaa/bbb/"+name+".pdf");
Uri path = Uri.fromFile(f);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(path, "application/pdf");
現在一些文件中,閱讀開放正常,但一些文件它不是打開它說ķ
"This Document cannot be opened".
但是,如果使用入資產管理打開的文件它完美的罰款。
這裏有什麼問題,
您是否檢查位於「/ sdcard/AAA/BBB /「?還是隻在資源?如果您檢查並比較它們,並且它們有所不同,這可能是由於您假定InputStream.available()返回了正確的底層資源大小:它只包含*可以讀取的字節數的估計值(或跳過),而不會被下一次調用該輸入流的方法所阻塞。*(根據JDK JavaDocs) – mkl 2013-02-18 10:59:25
@mkl thnaks,yes您的答案是正確的,文件大小不同,該怎麼辦? – Goofy 2013-02-18 11:08:44