Как сохранить список файлов из консоли в каталог, используя Java? - PullRequest
1 голос
/ 16 февраля 2011

здесь код, найденный на этом форуме, и мне нужно сохранить 10 последних файлов в другой каталог, я пытался изменить, но он работает не так, как я хотел.

любая помощь, спасибо

код

import java.io.File;
import java.util.Arrays;
import java.util.Comparator;
import java.io.*;
import java.text.*;
import java.util.*;




    public class Newest
    {
        public static void main(String[] args)
        {
            File dir = new File("c:\\File");
            File[] files = dir.listFiles();
            Arrays.sort(files, new Comparator<File>()
            {
                public int compare(File f1, File f2)
                {
                    return Long.valueOf(f2.lastModified()).compareTo
                            (
                            f1.lastModified());
                }
            });
            //System.out.println(Arrays.asList(files));
            for(int i=0, length=Math.min(files.length, 12); i<length; i++) {
        System.out.println(files[i]);


    for (File f : files) {
            System.out.println(f.getName() + " " + sdf.format(new Date(f.lastModified())));
            File dir = new File("c://Target");
            boolean success = f.renameTo(new File(dir,f.getName()));
            if (!success)


            }
        }
    } 

1 Ответ

1 голос
/ 16 февраля 2011

Я думаю, у вас есть 2 проблемы:

  • Вы хотите хранить файлы в другом каталоге, код перемещает файлы (renameTo(..))
  • Вы запускаете "«цикл перемещения» внутри цикла, который запускает все файлы (вы пытаетесь их переместить много раз)

Я немного очистил ваш код и удалил лишний цикл.Также обратите внимание, что до перемещение файлов не копирование файлов (я добавляю метод копирования ниже):

public static void main(String[] args)
{
    String source = "c:/File";
    String target = "c:/Target";

    // get the files in the source directory and sort it
    File sourceDir = new File(source);
    File[] files = sourceDir.listFiles();
    Arrays.sort(files, new Comparator<File>() {
        public int compare(File f1, File f2) {
            return (int) (f1.lastModified() - f2.lastModified());
        }
    });

    // create the target directory
    File targetDir = new File(target);
    targetDir.mkdirs();

    // copy the files
    for(int i=0, length=Math.min(files.length, 10); i<length; i++)
        files[i].renameTo(new File(targetDir, files[i].getName()));
}

Этот метод копирует файлы:

private void copyFile(File from, File to) throws IOException,
        FileNotFoundException {

    FileChannel sc = null;
    FileChannel dc = null;

    try {
        to.createNewFile();

        sc = new FileInputStream(from).getChannel(); 
        dc = new FileOutputStream(to).getChannel();

        long pos = 0;
        long total = sc.size();
        while (pos < total)
            pos += dc.transferFrom(sc, pos, total - pos);

    } finally {
        if (sc != null)
            sc.close();
        if (dc != null)
            dc.close();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...