JAVA Android,使用getResourceAsStream访问文件

时间:2014-05-22 20:12:44

标签: java android inputstream

我想在我的Android应用程序中处理一个属性文件。 Properties-File位于main-Folder中,位于包含其他jar文件的文件夹中。我知道,这不是最好的。

代码:

InputStream propStream=MainActivity.class.getResourceAsStream("data.properties");
         Log.d("propStreamOutput",propStream.toString());
                File data = new File(propStream.toString());


                Reader reader;
                try {
                    reader = new FileReader(data);
                     dataProp = new Properties();
                     dataProp.load( reader );
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                  catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }

所以,第2行的日志说: libcore.net.url.JarURLConnectionImpl$JarURLConnectionInputStream@421302e8

以这种形式,logcat调用System.err:

java.io.FileNotFoundException/libcore.net.url.JarURLConnectionImpl$JarURLConnectionInputStream@42097218: open failed: ENOENT (No such file or directory) 

但是当我这样评论时:

        InputStream propStream=MainActivity.class.getResourceAsStream("data.properties");
         Log.d("propStreamOutput",propStream.toString());
                File data = new File(propStream.toString());


//                  Reader reader;
//                  try {
//                      reader = new FileReader(data);
//                       dataProp = new Properties();
//                       dataProp.load( reader );
//                  } catch (FileNotFoundException e) {
//                      // TODO Auto-generated catch block
//                      e.printStackTrace();
//                  }
//                  
//                    catch (IOException e) {
//                              // TODO Auto-generated  catch block
//                              e.printStackTrace();
//                          }

然后没有system.err!当然,第2行的日志调用也是如此。

2 个答案:

答案 0 :(得分:0)

如果您真的想使用 getResourceAsStream(),那么您必须将文件与 .java一起放在“ src ”文件夹中文件。

这通常是标准Java应用程序的方式,但在Android上,执行此类操作的最常用方法是通过AssetsManager将文件放在“assets”文件夹中,该文件夹可从{{{}}访问3}}或任何Activity。如下所示:

InputStream is = null;
try {
   is = context.getAssets().open("data.properties");
} catch (final IOException e) {
   e.printStackTrace();
} finally {
   closeStreamGracefully(is);
}

答案 1 :(得分:0)

getRessourceAsStream返回一个InputStream。当您在此处调用toString时,它将返回string representation of the object。然后,当您创建数据文件并尝试读取它时,将尝试打开像@sdqzeffdfsf这样的文件。如果您想要阅读此文件中的属性,请使用Properties

Properties properties = new Properties();
properties.load(propStream);

这是标准的java。但是在Android中你通常使用AssetManager