中国語辞典開発-assets,rawのInputStreamデータストリーム操作(ファイル分割合併)
ファイルの移動
一.アプリケーションでは、さらに使用するために、様々な理由でassetsまたはrawフォルダ内に外部ファイルを配置する必要がある.この2つのフォルダには、次の違いと連絡先があります.
データを分割するコードは次のとおりです.
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();
}
}
二つ目は、以上の2つのフォルダがInputStreamデータストリームしか生成できないことであり、プログラムに他の必要がある場合、何もできません.たとえば、apkに組み込まれてこの2つのフォルダにしか入れられないsqliteのdbファイルが外に作成されますが、必要に応じてsdcardまたはdatabaseに配置することができます.そのため、ファイルを読み取り、該当する場所で目的のファイルを生成し、自分の必要に応じて読み取る必要があり、これも第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) {
}
}