zmywly8866

zmywly8866 查看完整档案

填写现居城市  |  填写毕业院校  |  填写所在公司/组织填写个人主网站
编辑

写出来是为了能够更清晰地理解。

个人动态

zmywly8866 关注了用户 · 2020-01-19

茶轴的青春 @chazhoudeqingchun

我的公众号:《Java技术zhai》,欢迎订阅!
不定期的干货技术分享,带你重新领略架构的魅力

关注 691

zmywly8866 赞了文章 · 2015-08-12

不解压直接读取压缩包中的文件

最近做的一个Android项目中,需要将一个有20W份html文件的压缩包下载到本地,解压后在本地浏览;在解压的时候尝试了很多方法都无法完成解压(文件数量太大,要么解压超慢要么就内存溢出程序崩溃),后来放弃解压,直接从压缩包中读取文件,下面将方法整理如下


  • 通过ZipFile.getEntry(“文件名”)方法获取来获取压缩包中的指定文件对象

    public static void readZipFile(String file,String fileName) throws Exception {  
        ZipFile zf = new ZipFile(file);
        ZipEntry ze = zf.getEntry(fileName);
        InputStream in = zf.getInputStream(ze);
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        String line;
        StringBuffer result = new StringBuffer();
        while ((line = br.readLine()) != null) {  
            result.append(line+"\n");
        }
        System.out.println(result);
    }
    

    在上面的方法中,只要指定压缩包路径(file)以及压缩包中指定的文件名称(fileName),就可以读取到该html文件中的内容

  • 接下来我们对上面的方法进行改造,将指定文件从压缩包中读取出来并写入到指定的目录下,以便于在Android项目中进行查看

    /**
      * 
      * @param file 压缩包路径
      * @param saveRootDirectory 写入文件夹路径
      * @param fileName 文件名
      * @throws FileNotFoundException
      * @throws IOException
      */
    public static void writeZipFile(String file,String saveRootDirectory,String fileName) throws FileNotFoundException, IOException {
        int len = 0;
        ZipFile zf = new ZipFile(file);
        ZipEntry ze = zf.getEntry(fileName);
        InputStream read = zf.getInputStream(ze);
        File writeFile = new File(saveRootDirectory + fileName);
        if (!writeFile.exists()) {  
            File rootDirectoryFile = new File(saveRootDirectory);  
            //创建目录  
            if (!rootDirectoryFile.exists()) {  
                rootDirectoryFile.mkdirs();  
            } 
            //创建文件  
            writeFile.createNewFile();
    
            BufferedOutputStream write = new BufferedOutputStream(new FileOutputStream(file));
            //写入文件内容
            while ((len = read.read()) != -1) {
                write.write(len);
            }
            write.flush();  
            write.close();  
        }
        read.close();  
    }
    

    调用writeZipFile方法,将指定的文件(fileName)从压缩包(file)中读取出来后并写入到指定的文件夹(saveRootDirectory)下,通过WebView.loadUrl("file:///saveRootDirectory/fileName")实现html文件的查看,通过这种方式,我们避免了在移动端解压大文件时长时间的等待、甚至是导致程序崩溃这种不好的用户体验,需要查看某个文件从压缩包中读取即可。

查看原文

赞 3 收藏 7 评论 3

zmywly8866 赞了问题 · 2015-07-07

Android自己写资源管理器

我想做一个类似资源管理器的应用,点击以后可以直接进去mnt/sdcard这个目录。查看里面的内容。以前我都是直接使用系统的,像下面的方式。

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType(ContactsContract.Contacts.CONTENT_ITEM_TYPE);
startActivityForResult(intent, 1);

现在,我需要打开mnt/sdcard这个目录,我还有一个按钮,点击以后可以返回上级目录,并且UI方面有很大的不同,难道需要我自己重新做一个资源管理器吗?
有什么好的思路?

关注 2 回答 1

zmywly8866 关注了问题 · 2015-06-11

微信(Android)是如何处理系统表情的?

  1. 输入法中有表情库, 但是微信的和其他程序的不一样(微信和网易新闻中输入法显示的表情).
    微信中输入法显示的标情
    网易新闻中输入法显示的表情

  2. 我解压了微信的安装文件(APK), 发现drawable文件夹下表情文件已经很少了,有的也是以前QQ遗留的一些表情, 在 assets文件下发现一个新的文件 emoji_compact 文件, 该文件有 1.1M 左右, 见图
    表情文件

似乎微信(Android)对于表情的处理发生了变化, 但是这种处理方式我还不太清楚, 在这里咨询一下, 关于系统表情的处理 :)

关注 4 回答 0

zmywly8866 回答了问题 · 2015-06-11

解决Android LinearLayout动态添加View时如何设置View间的间距

有很多种方法的,随便说两种:
1、通过给view设置LayoutParams,在addView的时候,将layoutParams也作为入参就可以了;
2、可以再view后面或者下面添加一个占有一定宽度但背景透明的BlankView,这样view之间就通过BlankView隔开了。

关注 5 回答 4

zmywly8866 回答了问题 · 2015-06-11

解决eclipse android LogCat突然无内容

通过DDMS或者ADB命令“adb devices”查看是否有Android设备与PC相连,如果没有就再连一遍,如果连了直接在DDMS的设备列表中选择该设备就OK了。

关注 4 回答 3

zmywly8866 回答了问题 · 2015-06-11

android中如何在include内部包含其他组件

你的include写错了

<include layout="@layout/view_toolbar">
    <view...>
    <view...>
</include>

应该把view标签写在view_toolbar.xml里面,include它不是Layout、ScrollView或者GridView,不能包含其它标签的,类似于C语言中头文件的写法。

关注 5 回答 5

zmywly8866 赞了回答 · 2015-04-28

解决如何提高Android编程效率?

降低到20秒以下

可以使用genymotion,另外最好开启自动构建(工程菜单下 Build Automatically),这样应该会快一些。真机保持充电唤醒状态(开发者选项里面)


如果你的程序确实很大,并且上面的操作没有任何显著作用,请考虑下面的方案。

利用好20秒

可以喝杯水,这个很重要的。 切换到终端查看日志。

关注 4 回答 2

zmywly8866 赞了回答 · 2015-04-28

请问如何可以拿到android assets/res下文件路径?

不知道你为什么想要得到这些文件的路径,退一步讲即使你得到这些文件的路径一般也无法在别的应用中使用。

我想可能你的问题是,你知道res名称,但是不知道resid,如果是这样的话,你可以通过Resources#getIdentifier 得到资源id,具体可以参考http://droidyue.com/blog/2014/09/12/get-resource-id-by-name-in-android...

关注 2 回答 1

zmywly8866 关注了用户 · 2014-07-23

朴成国 @icefrog_me

关注 2

认证与成就

  • 获得 8 次点赞
  • 获得 2 枚徽章 获得 0 枚金徽章, 获得 1 枚银徽章, 获得 1 枚铜徽章

擅长技能
编辑

(゚∀゚ )
暂时没有

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2014-01-21
个人主页被 540 人浏览