簡體   English   中英

為什么我在Android平台(已經在Java中工作)上得到FileNotFoundExceptoin?

[英]Why I'm getting FileNotFoundExceptoin on Android platform (that already worked in Java)?

這段代碼可以在Java上完美運行,但是當我在Android平台上運行時,它會拋出TransformerExceptionFileNotFoundException 為什么會引發此類異常? 這整天困擾着我。 代碼如下:

    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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM