android用流把项目里的xml文件复制到sdcard的方法(含乱码问题)

       最近写一个项目,在运行程序的时候需要把程序里的一个xml文件的内容copy到sdcard上,在这个过程中遇到了让我很纠结的问题--中文乱码问题,研究了很久终于成功了。。。下面看看实现过程

       1、先判断sdcard是否挂载,然后在卡上建立需要的文件夹及文件,代码如下

File sdcardDir = Environment.getExternalStorageDirectory();
			if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
			   //得到一个路径,内容是sdcard的文件夹路径和名字
			    String path = sdcardDir.getPath()+"/profitData";   //得到/sdcard/profitData的路径
			    File folder= new File(path);     //创建文件夹
			    File data = new File(path, "data.xml");       //创建xml文件
			    if (!folder.exists()) {
				    //若不存在,创建目录,可以在应用启动的时候创建
			    	folder.mkdirs();
			    }
			    
			    if(!data.exists()) {
					data.createNewFile();
			    }

2、以流的方法从项目里取得xml文件,方法为:
     InputStream input = getResources().openRawResource(R.xml.data);          //文件放在res/xml底下
     InputStreamReader inputReader = new InputStreamReader(input, "UTF-8");
     bReader = new BufferedReader(inputReader);                         //把它包装成reader

    然后再创建一个输出流,用来把数据输到卡上,方法为:
    fw = new FileWriter(data);   //data为方法1创建的
    然后开始传输数据
    while((line = bReader.readLine()) != null) {
         fw.write(line);
     }

    但是这个时候问题出现了,从项目里读出来的xml的数据有乱码,我查了很多很多的方法,纠结了很久,改编码什么的都试过了,都不好使。。 最后查到了一种方法:

                                                                     


     查到一篇文章是这么说的:在建立项目中一般会默认建立assets文件,当然我们还可以在res文件下面建立raw文件夹,这里面都可以存放一些图片,音频或者文本信息,可以供我们在程序当中进行使用,不过他们两个也有不同点。assets下面的文件不会被编译,通过路径可以去访问其中的内容。raw中文件会自动编译,我们可以在R.java文件中找到对应的ID。如果文件比较大一点的会放入到aeests文件中,因为用这个文件文件当中的信息,相当于要去进行IO流操作,比较耗时的操作。
其中比较重要的是获取到Assets和Raw文件夹中的资源方法:
Assets: AssetManager assetManager = getAssets();
Raw: InputStream inputStream = getResources().openRawResource(R.raw.demo);


我抱着试一试的态度,结果成功了。
如图,我把xml文件拷到assets下面后,把相应的输入流改成 用AssetManager后就好使了,激动万分。
方法为把方法2的input换成下面的input:

AssetManager assetManager = getAssets();
InputStream input = null;
try {
    input = assetManager.open("data.xml");
} catch(IOException e) {
    e.printStackTrace();
}
    InputStreamReader inputReader = new InputStreamReader(input, "UTF-8");
    bReader = new BufferedReader(inputReader);
    fw = new FileWriter(data);
    String line=""; 
    while((line = bReader.readLine()) != null) { 
    fw.write(line);
    }
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值