[英]Why I'm getting FileNotFoundExceptoin on Android platform (that already worked in Java)?
這段代碼可以在Java上完美運行,但是當我在Android平台上運行時,它會拋出TransformerException
和FileNotFoundException
。 為什么會引發此類異常? 這整天困擾着我。 代碼如下:
public void createXMLInstance() {
try {
docBuilder = dbfac.newDocumentBuilder();
document = docBuilder.newDocument();
createSampleSMS();
createDocumentTree();
printToFile();
System.out.println("Sample SmsML file generated");
} catch (ParserConfigurationException pce) {
pce.printStackTrace();
}
}
private void createDocumentTree() {
Element rootEle = document.createElement("Messages");
document.appendChild(rootEle);
Iterator<SMS> it = smsList.iterator();
while (it.hasNext()) {
SMS msg = (SMS) it.next();
Element msgEle = createMessageElement(msg);
rootEle.appendChild(msgEle);
}
}
private void printToFile() {
try {
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(new File("SmsML.xml"));
transformer.transform(source, result);
} catch (TransformerException te) {
te.printStackTrace();
}
}
private Element createMessageElement(SMS msg) {
Element contactEle = document.createElement("Contact");
contactEle.setAttribute("Number", msg.contactNumber);
contactEle.setAttribute("Name", msg.sendersName);
Element msgBodyEle = document.createElement("Message");
msgBodyEle.setAttribute("Date", msg.getFormattedDate(msg.fullDate));
msgBodyEle.setAttribute("Time", msg.getFormattedTime(msg.fullDate));
Text messagDescrip = document.createTextNode(msg.messageBody);
msgBodyEle.appendChild(messagDescrip);
contactEle.appendChild(msgBodyEle);
return contactEle;
}
public void createSampleSMS() {
smsList.add(new SMS("079399877339", "Tomas", "this is a sample message"));
smsList.add(new SMS("079398546339", "", "hey how are you Sushan"));
smsList.add(new SMS("079395486339", "Lusan", "i'm glad that you came to see me"));
smsList.add(new SMS("079898899556", "Lusan", "i'm not well today"));
smsList.add(new SMS("078158656522", "Jhu", "he told me he was feeling blue"));
smsList.add(new SMS("079398546339", "Lusan", "oh that's so sad"));
}
編輯:獲得此形式printStackTrace():
01-30 23:08:35.466: I/global(8995): Default buffer size used in BufferedInputStream constructor. It would be better to be explicit if an 8k buffer is required.
01-30 23:08:52.856: W/System.err(8995): javax.xml.transform.TransformerException: java.io.FileNotFoundException: /SmsML.xml (Read-only file system)
01-30 23:08:52.916: W/System.err(8995): at org.apache.xalan.transformer.TransformerIdentityImpl.createResultContentHandler(TransformerIdentityImpl.java:297)
01-30 23:08:52.956: W/System.err(8995): at org.apache.xalan.transformer.TransformerIdentityImpl.transform(TransformerIdentityImpl.java:330)
01-30 23:08:52.986: W/System.err(8995): at my.android.pack.SmsMLActivity.printToFile(SmsMLActivity.java:79)
01-30 23:08:53.026: W/System.err(8995): at my.android.pack.SmsMLActivity.create(SmsMLActivity.java:58)
01-30 23:08:53.056: W/System.err(8995): at my.android.pack.SmsMLActivity.onCreate(SmsMLActivity.java:48)
01-30 23:08:53.086: W/System.err(8995): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
01-30 23:08:53.117: W/System.err(8995): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
01-30 23:08:53.146: W/System.err(8995): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
01-30 23:08:53.176: W/System.err(8995): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
01-30 23:08:53.206: W/System.err(8995): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
01-30 23:08:53.237: W/System.err(8995): at android.os.Handler.dispatchMessage(Handler.java:99)
01-30 23:08:53.266: W/System.err(8995): at android.os.Looper.loop(Looper.java:123)
01-30 23:08:53.296: W/System.err(8995): at android.app.ActivityThread.main(ActivityThread.java:4627)
01-30 23:08:53.336: W/System.err(8995): at java.lang.reflect.Method.invokeNative(Native Method)
01-30 23:08:53.376: W/System.err(8995): at java.lang.reflect.Method.invoke(Method.java:521)
01-30 23:08:53.407: W/System.err(8995): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-30 23:08:53.446: W/System.err(8995): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-30 23:08:53.476: W/System.err(8995): at dalvik.system.NativeStart.main(Native Method)
01-30 23:08:53.506: W/System.err(8995): Caused by: java.io.FileNotFoundException: /SmsML.xml (Read-only file system)
01-30 23:08:53.566: W/System.err(8995): at org.apache.harmony.luni.platform.OSFileSystem.openImpl(Native Method)
01-30 23:08:53.596: W/System.err(8995): at org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:152)
01-30 23:08:53.627: W/System.err(8995): at java.io.FileOutputStream.<init>(FileOutputStream.java:97)
01-30 23:08:53.656: W/System.err(8995): at java.io.FileOutputStream.<init>(FileOutputStream.java:168)
01-30 23:08:53.686: W/System.err(8995): at java.io.FileOutputStream.<init>(FileOutputStream.java:147)
01-30 23:08:53.726: W/System.err(8995): at org.apache.xalan.transformer.TransformerIdentityImpl.createResultContentHandler(TransformerIdentityImpl.java:287)
01-30 23:08:53.756: W/System.err(8995): ... 17 more
正如堆棧跟蹤清楚地說明:
01-30 23:08:53.506: W/System.err(8995): Caused by: java.io.FileNotFoundException: /SmsML.xml (Read-only file system)
您無法讀取不存在的文件。
您的問題源於此行:
StreamResult result = new StreamResult(new File("SmsML.xml"));
這不是您在Android中使用本地文件的方式,並且假設您正在嘗試解析自己在代碼中其他位置下載的某些文件。
要了解有關Android內部和外部存儲區域的更多信息,請查看文檔的本部分 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.