Измененный код Desolator выше, чтобы передать управление в качестве параметра ... многоразового использования
private void MoveUp()
{
MoveItem(-1,listBox1);
}
private void MoveDown()
{
MoveItem(1,listBox1);
}
public void MoveItem(int direction,ListBox listBox)
{
// Checking selected item
if (listBox.SelectedItem == null || listBox.SelectedIndex < 0)
return; // No selected item - nothing to do
// Calculate new index using move direction
int newIndex = listBox.SelectedIndex + direction;
// Checking bounds of the range
if (newIndex < 0 || newIndex >= listBox.Items.Count)
return; // Index out of range - nothing to do
object selected = listBox.SelectedItem;
// Removing removable element
listBox.Items.Remove(selected);
// Insert it in new position
listBox.Items.Insert(newIndex, selected);
// Restore selection
listBox.SetSelected(newIndex, true);
}
a) Zip - это формат архива, а gzip - нет. Таким образом, итератор ввода не имеет особого смысла, если (например) ваши gz-файлы не являются сжатыми tar-файлами. Вероятно, вы хотите:
File outFile = new File(infile.getParent(), infile.getName().replaceAll("\\.gz$", ""));
б) Вы хотите только распаковать файлы? В противном случае вы можете использовать GZIPInputStream и читать файлы напрямую, то есть без промежуточной декомпрессии.
Но хорошо. Допустим, вы действительно только хотите распаковать файлы. Если это так, вы, вероятно, могли бы использовать это:
public static File unGzip(File infile, boolean deleteGzipfileOnSuccess) throws IOException {
GZIPInputStream gin = new GZIPInputStream(new FileInputStream(infile));
FileOutputStream fos = null;
try {
File outFile = new File(infile.getParent(), infile.getName().replaceAll("\\.gz$", ""));
fos = new FileOutputStream(outFile);
byte[] buf = new byte[100000];
int len;
while ((len = gin.read(buf)) > 0) {
fos.write(buf, 0, len);
}
fos.close();
if (deleteGzipfileOnSuccess) {
infile.delete();
}
return outFile;
} finally {
if (gin != null) {
gin.close();
}
if (fos != null) {
fos.close();
}
}
}
Если у вас есть фиксированное количество файлов для однократной распаковки, почему бы вам не использовать для этого существующие инструменты?
Как заметил Пол Мори, gunzip
может это сделать:
для i в * .gz; сделать gunzip $ i; сделано
И он автоматически назовет их, удалив .gz $
В Windows попробуйте winrar, возможно, или gunzip
из http://unxutils.sf.net
Что касается A, команда gunzip
создает несжатый файл с исходным именем без суффикса .gz
. См. страницу руководства .
Что касается B, нужен ли вам специально gunzip, или подойдет другой алгоритм сжатия? Существует java-порт алгоритма сжатия LZMA, используемый 7zip для создания файлов .7z
, но он не обрабатывает файлы .gz
.
GZip обычно используется только для отдельных файлов, поэтому обычно не содержит информации об отдельных файлах. Чтобы объединить несколько файлов в один сжатый архив, они сначала объединяются в несжатый файл Tar (с информацией об отдельном содержимом), а затем сжимаются в один файл. Эта комбинация называется Tarball.
Существуют библиотеки для извлечения информации об отдельных файлах из Tar, как и в случае с ZipEntries. Один пример. Сначала вам нужно будет извлечь файл .gz во временный файл, чтобы использовать его, или, по крайней мере, передать GZipInputStream в библиотеку Tar.
Вы также можете вызвать 7-Zip из командной строки, используя Java. Синтаксис командной строки 7-Zip находится здесь: Синтаксис командной строки 7-Zip. Пример вызова командной оболочки из Java: Выполнение команд оболочки в Java. Вам нужно будет дважды вызвать 7-Zip: один раз для извлечения Tar из файла .tar.gz или .tgz и еще раз для извлечения отдельных файлов из Tar.
Или вы можете просто сделать простую вещь и написать краткий сценарий оболочки или командный файл для распаковки. Нет смысла забивать квадратный штифт в круглое отверстие - для этого и созданы командные файлы. В качестве бонуса вы также можете передать им параметры, что значительно снизит сложность выполнения командной строки Java, но при этом позволит Java управлять выполнением.
Синтаксис командной строки 7-Zip. Пример вызова командной оболочки из Java: Выполнение команд оболочки в Java. Вам нужно будет дважды вызвать 7-Zip: один раз для извлечения Tar из файла .tar.gz или .tgz и еще раз для извлечения отдельных файлов из Tar.Или вы можете просто сделать простую вещь и написать краткий сценарий оболочки или командный файл для распаковки. Нет смысла забивать квадратный штифт в круглое отверстие - для этого и созданы командные файлы. В качестве бонуса вы также можете передать им параметры, что значительно снизит сложность выполнения командной строки Java, но при этом позволит Java управлять выполнением.
Синтаксис командной строки 7-Zip. Пример вызова командной оболочки из Java: Выполнение команд оболочки в Java. Вам нужно будет дважды вызвать 7-Zip: один раз для извлечения Tar из файла .tar.gz или .tgz и еще раз для извлечения отдельных файлов из Tar.Или вы можете просто сделать простую вещь и написать краткий сценарий оболочки или командный файл для распаковки. Нет смысла забивать квадратный штифт в круглое отверстие - для этого и созданы командные файлы. В качестве бонуса вы также можете передать им параметры, что значительно снизит сложность выполнения командной строки Java, но при этом позволит Java управлять выполнением.
tar.gz или .tgz файл, и снова для извлечения отдельных файлов из Tar.Или вы можете просто сделать простую вещь и написать краткий сценарий оболочки или командный файл для распаковки. Нет смысла забивать квадратный штифт в круглое отверстие - для этого и созданы командные файлы. В качестве бонуса вы также можете передать им параметры, что значительно снизит сложность выполнения командной строки Java, но при этом позволит Java управлять выполнением.
tar.gz или .tgz файл, и снова для извлечения отдельных файлов из Tar.Или вы можете просто сделать простую вещь и написать краткий сценарий оболочки или командный файл для распаковки. Нет смысла забивать квадратный штифт в круглое отверстие - для этого и созданы командные файлы. В качестве бонуса вы также можете передать им параметры, что значительно снизит сложность выполнения командной строки Java, но при этом позволит Java управлять выполнением.
.gz-файлы (gzip) могут сохранить имя файла сжатого файла. Так, например, FuBar.doc может быть сохранен внутри myDocument.gz, и при соответствующем распаковке файл может быть восстановлен с именем FuBar.doc. К сожалению, java.util.zip.GZIPInputStream не поддерживает никакие способы чтения имени файла, даже если оно хранится внутри архива.