【问题标题】:Android Create String from XML-filepathAndroid 从 XML 文件路径创建字符串
【发布时间】:2016-11-09 05:45:44
【问题描述】:

在我的应用中,用户可以通过 Intent 选择一个 xml 文件:

选择:

Intent chooseFileXML = new Intent(Intent.ACTION_GET_CONTENT);
chooseFileXML.setType("text/xml");
Intent intentXML = Intent.createChooser(chooseFileXML, getString(R.string.importXMLDatei));
startActivityForResult(intentXML, REQUEST_CODE_IMPORT_XML_FILE);

接收:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        switch (requestCode){
            case REQUEST_CODE_IMPORT_XML_FILE:
                if(resultCode == RESULT_OK){
                    Uri uri = data.getData();
                    String filePath = uri.getPath();
                    File fl = new File(filePath);
                    //Get xml-code from file and put it in a String
                    FileInputStream fin = null;
                    try {
                    fin = new FileInputStream(fl);
                    BufferedReader reader = new BufferedReader(new  InputStreamReader(fin));
                    StringBuilder sb = new StringBuilder();
                    String line;
                    while ((line = reader.readLine()) != null) {
                        sb.append(line).append("\n");
                    }
                    reader.close();
                    System.out.println(sb.toString());

                    fin.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
             }
             break;
        }
    }

我收到了正确的文件路径。但在这一行: fin = new FileInputStream(fl); 我得到这个错误:

java.io.FileNotFoundException:/document/primary:Android/data/com.oli.myapp/Files/test.xml:打开失败:ENOENT(没有这样的文件或目录)

【问题讨论】:

    标签: android xml file inputstream


    【解决方案1】:

    实际上是文件路径的问题。你的文件路径无效,所以找到文件的真实路径

     String filePath = getRealPathFromURI(uri);
    

    getRealPathFromURI 方法

    private String getRealPathFromURI(Uri contentUri) {
    String[] proj = { MediaStore.Images.Media.DATA };
    CursorLoader loader = new CursorLoader(mContext, contentUri, proj, null, null, null);
    Cursor cursor = loader.loadInBackground();
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    String result = cursor.getString(column_index);
    cursor.close();
    return result;
     }
    

    【讨论】:

    • 引起:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'char[] java.lang.String.toCharArray()'
    • Nowhere:它在这一行显示错误:File fl = new File(realPath);
    猜你喜欢
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    • 2014-05-09
    • 1970-01-01
    相关资源
    最近更新 更多