Android文字图片写入CSV(Base64)并分享

做的一个分享的功能,将文字图片以CSV的形式分享到邮件之类的应用。

首先,CSV逗号分隔值文件格式(Comma-Separated Values),纯文本形式,逗号分隔,一行数据不跨行。

图片转换成Base64字符串

public String writeBase64(String path) {          //path图片路径
        byte[] data = null;
        try {
            InputStream in = new FileInputStream(path);
            data = new byte[in.available()];
            in.read(data);
            in.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return Base64.encodeToString(data, Base64.NO_WRAP);        //注意这里是Base64.NO_WRAP  
    }

最后返回 Base64.encodeToString(data, Base64.NO_WRAP),注意这里要使用Base64.NO_WRAP,而不是Base64.DEFAULT。default当字符串过长(RFC2045里规定了每行最多76个字符换行),自动会加入换行符,影响使用,用NO_WRAP解决。

生成和写入CSV

public File writeCsv() {
        String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/csv/";      //CSV文件路径
        File csv = new File(path + "KnowYourTeam.csv");
        File pa = new File(path);
        if (!pa.exists()) {
            pa.mkdirs();
        }
        if (!csv.exists()) {
            try {
                csv.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else {
            try {
                csv.delete();                  //这里写的如果文件存在会删除文件新建一个文件
                csv.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        try {
            BufferedWriter bw = new BufferedWriter(new FileWriter(csv, true));
            ArrayList<Person> list = new PersonDao(this).queryAll();                //数据库取Person List
            for (Person person : list) {                                 //循环写入person数据(name,title,image)
                String img = writeBase64(person.getPicPath());                    //getPicPath()路径
                bw.write(person.getName() + "," + person.getTitle() + "," + img);
                bw.newLine();                                       //换行,一行一组数据
            }
            bw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return csv;
    }

最后分享


          File csv = writeCsv();
                Intent sendIntent = new Intent();
                sendIntent.setAction(Intent.ACTION_SEND);
                sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(csv));
                sendIntent.putExtra(Intent.EXTRA_SUBJECT, "KnowYourTeam shared data");
                SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
                sendIntent.putExtra(Intent.EXTRA_TEXT, "There is CSV. " + df.format(new Date()));
                sendIntent.setType("text/comma-separated-values");
                startActivity(Intent.createChooser(sendIntent, "share"));

Intent.ACTION_SEND  带附件发送

Intent.createChooser(sentIntent, “share”)  可以选择支持这种格式的应用打开分享
 
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值