Я сделал приложение на Android, и это приложение записывает активность в файлы. У меня есть возможность экспортировать файлы, поэтому я сохраняю файлы в формате ZIP. Если в ZIP-архив добавлено более одного файла, я получаю следующую ошибку.
(флаги общего назначения - локальные: 808, шестнадцатеричные, центральные: 8 шестнадцатеричных).
Локальные и центральные значения GPFlags не совпадают.
Это происходит только с Android 2.3 и использованием winzip или 7zip. Я могу обойти эту проблему, используя Windows Explorer или WinRar, но я хотел бы решить эту проблему, а не избегать ее.
Это не происходит при использовании одного и того же приложения на устройстве Android 2.2.
Я искал вокруг и нашел несколько комментариев о шифровании, но я ничего не шифрую. Я также нашел некоторые комментарии по обновлению некоторых библиотек и тому подобное, но я использую Android SDK 11 и Java JDK 1.6.0_25.
Я пробовал 2 разных кода с одинаковым результатом
int count = log_.getLogFileList(files_);
if (count > 0)
{
String inFileName;
File inFile;
String phoneNumLast =OsmoService.getAccountString(OsmoService.context).substring(6);
long date = files_.get(count - 1).lastModified();
SimpleDateFormat formatter = new SimpleDateFormat("MMddHHmmss");
String outdt = new String(formatter.format(new Date(date)));
String outFileName = new String("Dir Name" + "//" + "PREFIX" + "_" + outdt + ZIP_SUFFIX);
File outFile = new File(outFileName);
ZipOutputStream zos = new ZipOutputStream( new FileOutputStream( outFile ) );
BufferedOutputStream outBS = new BufferedOutputStream(zos, 8192 );
for (int idx = (count - 1); (idx >= 0) && !isCancelled(); idx--)
{
inFile = files_.get(idx);
BufferedReader inBR = new BufferedReader(new FileReader(inFile), 8192);
inFileName = inFile.getName();
Log.v(LOG_TAG, "MailLogFiles - Zipping " + inFileName);
zos.putNextEntry( new ZipEntry(inFileName));
int zix;
while ( (zix = inBR.read()) != -1 )
outBS.write(zix);
outBS.flush();
zos.closeEntry();
inBR.close();
}
outBS.close();
и это
public static void compressFileList( String[] inFiles, String outFile )
throws IOException
{
ZipOutputStream zos = new ZipOutputStream(
new BufferedOutputStream( new FileOutputStream( outFile ) ));
byte data[] = new byte[2048];
for (int i = 0; i < inFiles.length; i++)
{
BufferedInputStream in = new BufferedInputStream( new FileInputStream( inFiles[i] ) );
zos.putNextEntry( new ZipEntry(inFiles[i]) );
int count;
while( ( count = in.read( data, 0, data.length ) ) != -1 )
zos.write(data, 0, count);
zos.closeEntry();
in.close();
}
zos.close();
}