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")  可以选择支持这种格式的应用打开分享

时间: 2024-08-30 10:41:46

Android文字图片写入CSV(Base64)并分享的相关文章

android 将图片通过base64转换为String 将图片String转换为Bitmap

1.Bitmap转换为图片字符串 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); //该方法用来压缩图片,第一个参数为图片格式,第二个参数为截取图片的保留率,如当前为90,则保留之前图片90%的区域 bitmap.compress(Bitmap

Android开发 - ImageView加载Base64编码的图片

在我们开发应用的过程中,并不是所有情况下都请求图片的URL或者加载本地图片,有时我们需要加载Base64编码的图片.这种情况出现在服务端需要动态生成的图片,比如: 二维码 图形验证码 ... 这些应用场景有个共同点就是,这些图片都是由服务器动态生成,并不需要生成后保存成文件再返回给客户端. Android中ImageView加载Base64图片其实非常简单,并不需要引入第三方库,方法如下: import android.util.Base64; # 代码片段 String base64 = "d

iOS Base64编码(文字/图片)

Base64 是网络上常见的用于传输8bit字节代码的编码方式之一,可以将二进制转为"字符串".在应用程序中常常需要把二进制数据编码为适合放在URL中的形式,此时采用Base64编码具有不可读性,即所编码的数据不会被人用肉眼直接看到. 然而,标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准的Base64中的'/'和'+'字符变为'%XX'的形式,而这些'%'号在存入数据库时还需要再进行转换,因为ANSI SQL中将'%'号用作通配符.为解决此问题,可采用一种用于

一处折腾笔记:Android内嵌html5加入原生微信分享的解决的方法

有一段时间没有瞎折腾了. 这周一刚上班萌主过来反映说:微信里面打开聚客宝.分享功能是能够的(这里是用微信自身的js-sdk实现的).可是在android应用里面打开点击就没反应了:接下来狡猾的丁丁在产品群里AT我说:偶们的产品设计不是一直都被技术给反压制住么?真是气死,呵呵.自己刚好有空又有兴趣,于是研究了下.没曾想竟也研究出来了.事后我对整个操作过程整理了下,方便他人也提升自己. 废话少扯.以下上干货. 我的思路是:在点击h5上的分享图标时.触发js事件,在这里面能够对当前设备的操作系统和浏览

[转] Android:微信授权登录与微信分享全解析

https://wohugb.gitbooks.io/wechat/content/qrconnent/refresh_token.html http://blog.csdn.net/xiong_it/article/details/48317527 PS: access_token是微信认证成功和微信平台做交互用的,access_token有2小时有效期.如果access_token过期后,使用refresh_token获得新的access_token.refresh_token的有效期为30

Android:微信授权登录与微信分享全解析

前言 在移动互联网浪潮中,联网APP已经把单机拍死在沙滩上,很多公司都希望自家应用能够有一套帐号系统,可是许多用户却并不一定买账:我凭啥注册你家应用的帐号?微博,微信,QQ几乎成了每个人手机中的必装应用,于是微信,微博,QQ说了:来来来,你们都可以用我家的帐号登录你家应用,只要你遵循OAuth2.0协议标准就行.于是第三方社交帐号登陆成为了许多新兴应用的选择,由于腾讯官方微信开放平台的在线文档相对最新的SDK有些出入,并且登录相关的文档结构次序有些紊乱,今天就把我的一些经验记录在此,对微信开放平

html5将图片转换成base64的实例代码

这篇文章给大家介绍了如何利用html5将图片转换成base64,文中通过示例代码介绍的很详细,有需要的朋友们可以参考借鉴. base64编码介绍base64是一种网络上常用的8bit字节代码的编码方式,base64可以用于http环境下传递较长的标识信息,同时可以放在url当中使用,因为base64不惧可读性,所以具有一定的加密功能. 为什么要把图片转换成base64编码?将图片转换成base64代码可以减少http请求,因为图片可以以字符编码的形式直接传递到客户端,而文件形式都需要进行http

android 拉伸图片

Android拉伸图片用的是9.png格式的图片,这种图片可以指定图片的那一部分拉伸,那一部分显示内容,美工给的小图片也能有很好的显示效果. 原背景图片 可以看到原背景图片很小,即使在再长的文字,背景图片的圆角也不会拉伸 制作###.9.png 打开Android 的sdk>tools>draw9patch.bat,将图片拖进去开始制作###.9.png 点击四周即可添加黑点,拖拉黑点可成线.图片四周的黑线和黑点都有不同的意思. 上面黑线或者点表示纵向可拉伸的区域 一般一个点即可 左边黑线或者

Android压缩图片到100K以下并保持不失真的高效方法

在开发Android企业应用时,会经常上传图片到服务器,而我们公司目前维护的一个项目便是如此.该项目是通过私有apn与服务器进行交互的,联通的还好,但移动的速度实在太慢,客户在使用软件的过程中,由于上传的信息中可能包含多张图片,会经常出现上传图片失败的问题,为了解决这个问题,我们决定把照片压缩到100k以下,并且保证图片不失真(目前图片经过压缩后,大约300k左右).于是我就重新研究了一下Android的图片压缩技术. Android端目录结构如下图所示: 使用的第三方库jar包,如下图所示: