`
ishelf
  • 浏览: 106363 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

汉语词典开发-assets,raw的InputStream数据流操作(文件分割合并)

阅读更多

 

文件移动

一. 在应用中由于种种原因需要将一些外部文件放在 assets 或者 raw 文件夹内,以便进一步使用。这两个文件夹有以下的区别和联系:

  1. 都是以数据流的形式进行读取,从而导致 Java 中其他的一些读取方式不能很好的作用在这些文件上面,例如 RandomAccessFile FileReader 等之类的类。如果由于需要需要使用基于文件的类,则可以根据数据流创建创建临时文件( File.createTempFile )当做一个折中的办法。这是一种方法,下面将会介绍另一种方法
  2. raw 文件夹中的文件不能包含有目录结构并且每个文件会映射到一个 id ,而 assets 文件夹可以有目录结构。对于对文件名敏感的程序则使用 raw 进行外部文件存储较为方便,而对于较依赖目录结构的文件则使用 assets 存储
  3. 这两个文件夹中的文件都不能太大,官方数据是小于 1M 。这点需要时刻记住,因为产生的问题十分隐蔽,在程序中可以找到该文件也可以产生 inputStream 但是在读取时会抛出 IOException 异常。这中大文件需要先分割在进行读取
  4. 这两个文件夹对文件名称大小写敏感,命名是尽量用小写,并且在分割合并后也要注意文件名称,否则程序会认为它们是不同的文件,但是在创建时会覆盖掉先前的文件(这点太隐蔽了, ~~~~(>_<)~~~~

  

以下是分割数据的代码:

 

	public static void CutFilesInSizeParts(InputStream fis,
			String OutputFileName, int MaxPartSize) {
		try {
			
			int TotalLength = fis.available();
			byte[] buffer = new byte[TotalLength + 1];
			int len = fis.read(buffer);

			int nbPart = len / MaxPartSize + 1;
			int CurPos = 0;

			for (int i = 0; i < nbPart; i++) {
				int PartLen = MaxPartSize;
				if (CurPos + PartLen >= len)
					PartLen = len - CurPos;
				String outRealFileName = OutputFileName + (i + 1);
				FileOutputStream fos = new FileOutputStream(outRealFileName);
				fos.write(buffer, CurPos, PartLen);
				CurPos += PartLen;
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
 

 

二,正是以上两个文件夹只能产生 InputStream 数据流,当程序有别的需要时会显的无能为力。例如在外面创建了一个 sqlite db 文件,该文件需要内置到 apk 中只能放入这两个文件夹中,可是在使用时可要根据需要放置到 sdcard 中或者 database 中去。因此需要对读取文件并在相应位置生成目的文件,按照自己需要的方式进行读取,这也提供了第二种方法。这一步需要注意一下几点:

 

  1. 文件的权限,否则可能会被别的应用使用
  2. 若是要对分割后的文件进行合并,则要注意文件顺序

 

这里附上合并数据并拷贝的代码

//合并并拷贝数据
	public static void CreateFromRawDbFiles(File[] filelist,
			FileOutputStream Fos) {

		try {
			for (File file : filelist) {
				InputStream inputFile = new FileInputStream(file);
				int TotalLength = 0;
				try {
					TotalLength = inputFile.available();
				} catch (IOException e) {
				}
				// Reading and writing the file Method 1 :
				byte[] buffer = new byte[TotalLength];
				int len = 0;
				try {
					len = inputFile.read(buffer);
				} catch (IOException e) {
				}
				Fos.write(buffer,0,len);
				inputFile.close();
			}
			Fos.close();
		} catch (IOException e) {
		}
	}
 

 

分享到:
评论
1 楼 huxinli 2012-05-15  
 

相关推荐

    Laravel开发-laravel-assets

    Laravel开发-laravel-assets Laravel的资产管理

    pyecharts-assets-master.rar

    这个"pyecharts-assets-master.rar"文件是Pyecharts的一个数据引用包,包含了用于在Jupyter环境中以及网页上直接展示图表所需的所有资源。这个压缩包的解压后,我们可以找到一个名为"pyecharts-assets-master"的目录...

    nickliqian-pyecharts-assets-master.zip

    根据网站资源引用说明:pyecharts 使用的所有静态资源文件存放于 pyecharts-assets 项目中,默认挂载在 https://assets.pyecharts.org/assets/所以pyecharts图表默认会从该网站拉取js静态文件。实际运行时经常出现...

    Laravel开发-assets-generator

    `Laravel 开发-assets-generator` 可以自动处理这些任务,包括文件合并、压缩、版本控制以及自动更新 HTML 中的引用路径。 3. **工作原理** 这个工具首先会遍历指定的源代码目录,收集所有需要处理的文件,然后...

    Laravel开发-assets

    文件名为"assets-master"表明这可能是一个主资产目录,包含了所有未编译的源文件,可能包括如下结构: 1. `css/` - Less或Sass源文件 2. `js/` - JavaScript源文件,可能包含CoffeeScript 3. `images/` - 图像资源 4...

    Laravel开发-foundation-assets

    在本文中,我们将深入探讨与"Laravel开发-foundation-assets"相关的知识,这主要涉及使用Laravel框架构建项目时,如何有效地管理和使用前端资产,特别是ARCANESOFT的基础包资源。Laravel是一款流行的PHP框架,它提供...

    前端开源库-happngin-assets

    通过【happner-assets-master】这个压缩包文件,我们可以获得happngin-assets的源代码,以便研究其内部工作原理,或者对其进行定制和扩展以适应项目需求。源代码中通常包含了详细的文档和示例,帮助开发者更好地理解...

    前端开源库-koa-assets-minify

    在构建阶段完成资源的合并和压缩,然后在运行时通过Koa-assets-minify提供这些优化过的静态文件。 **总结** Koa-assets-minify是前端开发中一个实用的工具,能够帮助Koa应用提升性能,降低网络延迟,提高用户体验...

    前端开源库-grunt-deconst-assets.zip

    在实际应用中,`grunt-deconst-assets`通常与其他Grunt插件如`grunt-contrib-concat`(合并文件)、`grunt-contrib-uglify`(压缩JavaScript)或`grunt-contrib-cssmin`(压缩CSS)结合使用,形成完整的前端构建流程...

    前端开源库-connect-assets-eco

    2. **自动化编译**:当源文件发生变化时,connect-assets-eco能自动编译更新后的文件,无需手动干预,极大地提高了开发效率。 3. **文件合并**:可以将多个CSS或JavaScript文件合并成一个文件,减少HTTP请求,提升...

    pyecharts-assets:pyecharts中的所有资产

    pyecharts-assets 提供了 的静态资源文件。 可通过 localhost-server 或者 notebook-server 启动本地服务。首先将项目下载到本地 # 通过 git clone $ git clone https://github.com/pyecharts/pyecharts-assets.git ...

    Laravel开发-assets-laravel-aws-manager

    "Laravel开发-assets-laravel-aws-manager"的标题暗示了我们正在讨论一个与Laravel开发相关的项目,特别是针对AWS(Amazon Web Services)的资产管理。这个项目可能是为了帮助开发者更方便地管理和分发在AWS上的静态...

    前端开源库-grunt-big-assets

    `grunt-big-assets` 提供了这样的工具,通过对项目中的JS文件进行深度分析,识别出那些占用空间大、可能影响性能的"大资产",进而指导开发者进行相应的删除、替换或重构操作。 首先,让我们理解`grunt`是什么。`...

    前端开源库-css-find-assets

    《前端开源库-CSS-Find-Assets:洞察CSS资源的宝藏探索》 在现代Web开发中,CSS(层叠样式表)扮演着至关重要的角色,它负责赋予网页以美观的外观和交互效果。然而,随着项目规模的扩大,CSS文件往往会包含大量链接...

    Android Assets文件和Raw文件读取

    在Android应用开发中,Assets和Raw文件夹是两个重要的资源存储区域,用于存放非编译的、原始的数据文件。这两个目录都有各自的用途和特点,开发者可以根据需求选择合适的存储位置。 **Android Assets文件** Assets...

Global site tag (gtag.js) - Google Analytics