Java Android:将原始文件夹中的XML转换为字符串

Java Android:将原始文件夹中的XML转换为字符串,java,android,xml,render-to-string,Java,Android,Xml,Render To String,我遇到了一个让我发疯的问题xD。。。(首先:大家好!由于某些原因,我无法在文章开头的“大家好”前面加上“编辑oO…” 用例如下:我在项目的原始文件夹中存储了一个xml文件。xml文件如下所示: <myxml ....>Some text<innerelement ... /></myxml> 这将返回一个InputStream,然后我尝试使用以下代码将其转换为字符串: try { byte[] buffer = new byte[stream.avai

我遇到了一个让我发疯的问题xD。。。(首先:大家好!由于某些原因,我无法在文章开头的“大家好”前面加上“编辑oO…”

用例如下:我在项目的原始文件夹中存储了一个xml文件。xml文件如下所示:

<myxml ....>Some text<innerelement ... /></myxml>
这将返回一个InputStream,然后我尝试使用以下代码将其转换为字符串:

try {
   byte[] buffer = new byte[stream.available()];
   stream.read(buffer);
   stream.close();
   return new String(buffer);
} catch (IOException e) {
   // Error handling
}
如果我现在将结果字符串打印到logcat,我得到的只是一堆正方形,分布在几行上

所以我想我一定是错过了什么。。。我已经尝试了几种将这个输入流转换为字符串的方法,结果都是一样的(见上图)

提前感谢并致以最良好的问候

扎伊诺迪斯

2011年11月12日更新

我尝试使用扩展名.txt而不是.xml将xml文件保存在原始文件夹中。现在转换失败,出现OutOfMemory异常oO。我尝试了不同的方法,使用来自-all的建议转换数据,结果导致OutOfMemoryException:

11-12 06:09:22.671: I/TestRunner(652): java.lang.OutOfMemoryError
11-12 06:09:22.671: I/TestRunner(652):  at java.util.Scanner.expandBuffer(Scanner.java:2183)
11-12 06:09:22.671: I/TestRunner(652):  at java.util.Scanner.readMore(Scanner.java:2143)
11-12 06:09:22.671: I/TestRunner(652):  at java.util.Scanner.findPostDelimiter(Scanner.java:2121)
11-12 06:09:22.671: I/TestRunner(652):  at java.util.Scanner.setTokenRegion(Scanner.java:2031)
11-12 06:09:22.671: I/TestRunner(652):  at java.util.Scanner.next(Scanner.java:1017)
11-12 06:09:22.671: I/TestRunner(652):  at java.util.Scanner.next(Scanner.java:993)
11-12 06:09:22.671: I/TestRunner(652):  at de.softcon.mobileapp.framework.core.configuration.utility.StringUtils.InputStreamToString(StringUtils.java:69)
11-12 06:09:22.671: I/TestRunner(652):  at de.softcon.mobileoffences.domainmodel.serialization.test.CorpusDelictiFactoryTest.testSerialization(CorpusDelictiFactoryTest.java:32)
11-12 06:09:22.671: I/TestRunner(652):  at java.lang.reflect.Method.invokeNative(Native Method)
11-12 06:09:22.671: I/TestRunner(652):  at java.lang.reflect.Method.invoke(Method.java:507)
11-12 06:09:22.671: I/TestRunner(652):  at junit.framework.TestCase.runTest(TestCase.java:154)
11-12 06:09:22.671: I/TestRunner(652):  at junit.framework.TestCase.runBare(TestCase.java:127)
11-12 06:09:22.671: I/TestRunner(652):  at junit.framework.TestResult$1.protect(TestResult.java:106)
11-12 06:09:22.671: I/TestRunner(652):  at junit.framework.TestResult.runProtected(TestResult.java:124)
11-12 06:09:22.671: I/TestRunner(652):  at junit.framework.TestResult.run(TestResult.java:109)
11-12 06:09:22.671: I/TestRunner(652):  at junit.framework.TestCase.run(TestCase.java:118)
11-12 06:09:22.671: I/TestRunner(652):  at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
11-12 06:09:22.671: I/TestRunner(652):  at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
11-12 06:09:22.671: I/TestRunner(652):  at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529)
11-12 06:09:22.671: I/TestRunner(652):  at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1448)

我将此代码放在
onCreate(…)
中。它可以在xml文件中显示字符串

InputStream stream = getResources().openRawResource(R.raw.data);
try {
        byte[] buffer = new byte[stream.available()];
        stream.read(buffer);
        stream.close();
        Log.i("xml", new String(buffer));
} catch (IOException e) {
    // Error handling
}

根据您的描述判断,放在原始文件夹中的XML文件似乎与打包之前的其他XML文件一样经过编译。我自己也没试过,所以我不能肯定。也许您可以尝试重命名XML文件,使其具有.txt扩展名,然后读取它。因为您只需要将其作为字符串使用。

我不确定您是否仍在寻找解决方案,但如果您或其他任何人正在寻找解决方案,下面是我所做的工作,并让它发挥作用。 我完全使用了@wannik所做的,但指定了我想要使用的charsetName。所以我的代码看起来像这样:

InputStream stream = getResources().openRawResource(R.raw.data);
try {
    byte[] buffer = new byte[stream.available()];
    stream.read(buffer);        
    stream.close();
    String xml = new String(buffer, "UTF-8");      // you just need to specify the charsetName   
} catch (IOException e) {
    // Error handling
}

希望这能有所帮助。

谢谢你的提示-事情是我已经在这么做了;)这就是我如何发现“如果我现在将结果字符串打印到logcat,我得到的只是一堆正方形,分布在几行上。”-我已经在我的原始帖子中写过了。所以问题是-->为什么在记录转换后的字符串时,它不是预期的xml而是一堆方块。它是关于字符编码的吗?Mhhh不这么认为。。。我确保xml的格式为UTF-8-因此我不认为它是编码…我没有找到解决方案,所以我放弃了这个问题-我将标记您的答案为正确答案,因为这是它应该工作的方式,但不幸的是,对我来说不是,无论出于什么原因:(谢谢你的提示-我会尝试一下。我已经尝试过了,将我的xml保存为.txt。我现在得到的是内存不足异常,无论我尝试哪种转换方法oO…我想补充一点,这个xml文件真的一点都不大,这让我对OOM异常感到好奇…感谢分享这个答案:)!我最后把文件放进了xml文件夹,即使是较大的文件,它也能正常工作。但它可能会帮助那些与我当时处境相似的人。
InputStream stream = getResources().openRawResource(R.raw.data);
try {
    byte[] buffer = new byte[stream.available()];
    stream.read(buffer);        
    stream.close();
    String xml = new String(buffer, "UTF-8");      // you just need to specify the charsetName   
} catch (IOException e) {
    // Error handling
}