文件移动
一.
在应用中由于种种原因需要将一些外部文件放在
assets
或者
raw
文件夹内,以便进一步使用。这两个文件夹有以下的区别和联系:
-
都是以数据流的形式进行读取,从而导致
Java
中其他的一些读取方式不能很好的作用在这些文件上面,例如
RandomAccessFile
、
FileReader
等之类的类。如果由于需要需要使用基于文件的类,则可以根据数据流创建创建临时文件(
File.createTempFile
)当做一个折中的办法。这是一种方法,下面将会介绍另一种方法
-
raw
文件夹中的文件不能包含有目录结构并且每个文件会映射到一个
id
,而
assets
文件夹可以有目录结构。对于对文件名敏感的程序则使用
raw
进行外部文件存储较为方便,而对于较依赖目录结构的文件则使用
assets
存储
-
这两个文件夹中的文件都不能太大,官方数据是小于
1M
。这点需要时刻记住,因为产生的问题十分隐蔽,在程序中可以找到该文件也可以产生
inputStream
但是在读取时会抛出
IOException
异常。这中大文件需要先分割在进行读取
-
这两个文件夹对文件名称大小写敏感,命名是尽量用小写,并且在分割合并后也要注意文件名称,否则程序会认为它们是不同的文件,但是在创建时会覆盖掉先前的文件(这点太隐蔽了,
~~~~(>_<)~~~~
)
以下是分割数据的代码:
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
中去。因此需要对读取文件并在相应位置生成目的文件,按照自己需要的方式进行读取,这也提供了第二种方法。这一步需要注意一下几点:
-
文件的权限,否则可能会被别的应用使用
-
若是要对分割后的文件进行合并,则要注意文件顺序
这里附上合并数据并拷贝的代码
//合并并拷贝数据
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) {
}
}
分享到:
相关推荐
Laravel开发-laravel-assets Laravel的资产管理
这个"pyecharts-assets-master.rar"文件是Pyecharts的一个数据引用包,包含了用于在Jupyter环境中以及网页上直接展示图表所需的所有资源。这个压缩包的解压后,我们可以找到一个名为"pyecharts-assets-master"的目录...
根据网站资源引用说明:pyecharts 使用的所有静态资源文件存放于 pyecharts-assets 项目中,默认挂载在 https://assets.pyecharts.org/assets/所以pyecharts图表默认会从该网站拉取js静态文件。实际运行时经常出现...
`Laravel 开发-assets-generator` 可以自动处理这些任务,包括文件合并、压缩、版本控制以及自动更新 HTML 中的引用路径。 3. **工作原理** 这个工具首先会遍历指定的源代码目录,收集所有需要处理的文件,然后...
文件名为"assets-master"表明这可能是一个主资产目录,包含了所有未编译的源文件,可能包括如下结构: 1. `css/` - Less或Sass源文件 2. `js/` - JavaScript源文件,可能包含CoffeeScript 3. `images/` - 图像资源 4...
在本文中,我们将深入探讨与"Laravel开发-foundation-assets"相关的知识,这主要涉及使用Laravel框架构建项目时,如何有效地管理和使用前端资产,特别是ARCANESOFT的基础包资源。Laravel是一款流行的PHP框架,它提供...
通过【happner-assets-master】这个压缩包文件,我们可以获得happngin-assets的源代码,以便研究其内部工作原理,或者对其进行定制和扩展以适应项目需求。源代码中通常包含了详细的文档和示例,帮助开发者更好地理解...
在构建阶段完成资源的合并和压缩,然后在运行时通过Koa-assets-minify提供这些优化过的静态文件。 **总结** Koa-assets-minify是前端开发中一个实用的工具,能够帮助Koa应用提升性能,降低网络延迟,提高用户体验...
在实际应用中,`grunt-deconst-assets`通常与其他Grunt插件如`grunt-contrib-concat`(合并文件)、`grunt-contrib-uglify`(压缩JavaScript)或`grunt-contrib-cssmin`(压缩CSS)结合使用,形成完整的前端构建流程...
2. **自动化编译**:当源文件发生变化时,connect-assets-eco能自动编译更新后的文件,无需手动干预,极大地提高了开发效率。 3. **文件合并**:可以将多个CSS或JavaScript文件合并成一个文件,减少HTTP请求,提升...
pyecharts-assets 提供了 的静态资源文件。 可通过 localhost-server 或者 notebook-server 启动本地服务。首先将项目下载到本地 # 通过 git clone $ git clone https://github.com/pyecharts/pyecharts-assets.git ...
"Laravel开发-assets-laravel-aws-manager"的标题暗示了我们正在讨论一个与Laravel开发相关的项目,特别是针对AWS(Amazon Web Services)的资产管理。这个项目可能是为了帮助开发者更方便地管理和分发在AWS上的静态...
`grunt-big-assets` 提供了这样的工具,通过对项目中的JS文件进行深度分析,识别出那些占用空间大、可能影响性能的"大资产",进而指导开发者进行相应的删除、替换或重构操作。 首先,让我们理解`grunt`是什么。`...
《前端开源库-CSS-Find-Assets:洞察CSS资源的宝藏探索》 在现代Web开发中,CSS(层叠样式表)扮演着至关重要的角色,它负责赋予网页以美观的外观和交互效果。然而,随着项目规模的扩大,CSS文件往往会包含大量链接...
在Android应用开发中,Assets和Raw文件夹是两个重要的资源存储区域,用于存放非编译的、原始的数据文件。这两个目录都有各自的用途和特点,开发者可以根据需求选择合适的存储位置。 **Android Assets文件** Assets...