Проприетарная программа, в которой я работаю с застежками-молниями и извлекает определенные файлы, не изменяя измененную дату файлов при распаковке. Я также создаю свой собственный инструмент zip и извлечения, основанный на исходном коде в нашей программе, но когда я разархивирую файлы, измененная дата всех файлов с zip-файлами отображается с временем распаковки &. Вот код для моего извлечения:Java: Сохранение заархивированных файлов Дата изменения
public static int unzipFiles(File zipFile, File extractDir) throws Exception
{
int totalFileCount = 0;
String zipFilePath = zipFile.getPath();
System.out.println("Zip File Path: " + zipFilePath);
ZipFile zfile = new ZipFile(zipFile);
System.out.println("Size of ZipFile: "+zfile.size());
Enumeration<? extends ZipEntry> entries = zfile.entries();
while (entries.hasMoreElements())
{
ZipEntry entry = entries.nextElement();
System.out.println("ZipEntry File: " + entry.getName());
File file = new File(extractDir, entry.getName());
if (entry.isDirectory())
{
System.out.println("Creating Directory");
file.mkdirs();
}
else
{
file.getParentFile().mkdirs();
InputStream in = zfile.getInputStream(entry);
try
{
copy(in, file);
}
finally
{
in.close();
}
}
totalFileCount++;
}
return totalFileCount;
}
private static void copy(InputStream in, OutputStream out) throws IOException
{
byte[] buffer = new byte[1024];
System.out.println("InputStream/OutputStram copy");
while (true)
{
int readCount = in.read(buffer);
if (readCount < 0)
{
break;
}
out.write(buffer, 0, readCount);
}
}
Я уверен, что есть лучший способ сделать это, кроме делать InputStream/OutputStream копию. Я уверен, что это преступник, так как извлечение с помощью winRAR не меняет дату с файлами, которые я закрепил.
В Java единственный простой способ скопировать файл - это открыть потоки и читать их, что приводит к техническому изменению файла при копировании. Это означает, что вам нужно вручную установить последнее время модификации. См. Ответ TimK. – Vulcan
'ZipEntry entry = entries.nextElement(); System.out.println ("ZipEntry File:" + entry.getName()); Файл файла = новый Файл (extractDir, entry.getName()); file.setLastModified (entry.getTime()); ' –
@TimK приведенный выше код должен работать тогда, правильно? –