Операции ввода / вывода с файлом - PullRequest
1 голос
/ 21 марта 2011

У меня есть требование, например, будет количество .txt файлов в одной папке c:\onelocation.Я хочу записать содержимое в другое место в формате TXT.Эта часть довольно проста и понятна.Но здесь есть прерыватель скорости.

Интервал времени займет 120 секунд.Прочитайте файлы из вышеуказанного местоположения и запишите их в другие файлы с форматом txt до 120 секунд и сохраните файл с именем как отметка времени.
Через 120 секунд создайте еще один файл с этой отметкой времени, но мы должны прочитать файлы, которые были наведены на курсор в предыдущемфайл.

Пожалуйста, можете ли вы предложить какие-либо идеи, если код предоставлен, что было бы также заметно.

Спасибо Damu.

Ответы [ 4 ]

6 голосов
/ 30 марта 2011

Как насчет этого? Писатель, который автоматически меняет место записи два раза в 120 секунд.

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

public class TimeBoxedWriter extends Writer {
    private static DateFormat FORMAT = new SimpleDateFormat("yyyyDDDHHmm");

    /** Milliseconds to each time box */
    private static final int TIME_BOX = 120000;


    /** For testing only */
    public static void main(String[] args) throws IOException {
        Writer w = new TimeBoxedWriter(new File("."), "test");

        // write one line per second for 500 seconds.
        for(int i = 0;i < 500;i++) {
            w.write("testing " + i + "\n");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException ie) {}
        }
        w.close();
    }

    /** Output folder */
    private File dir_;

    /** Timestamp for current file */
    private long stamp_ = 0;

    /** Stem for output files */
    private String stem_;

    /** Current output writer */
    private Writer writer_ = null;


    /**
     * Create new output writer
     * 
     * @param dir
     *            the output folder
     * @param stem
     *            the stem used to generate file names
     */
    public TimeBoxedWriter(File dir, String stem) {
        dir_ = dir;
        stem_ = stem;
    }


    @Override
    public void close() throws IOException {
        synchronized (lock) {
            if (writer_ != null) {
                writer_.close();
                writer_ = null;
            }
        }
    }


    @Override
    public void flush() throws IOException {
        synchronized (lock) {
            if (writer_ != null) writer_.flush();
        }
    }


    private void rollover() throws IOException {
        synchronized (lock) {
            long now = System.currentTimeMillis();
            if ((stamp_ + TIME_BOX) < now) {
                if (writer_ != null) {
                    writer_.flush();
                    writer_.close();
                }
                stamp_ = TIME_BOX * (System.currentTimeMillis() / TIME_BOX);
                String time = FORMAT.format(new Date(stamp_));
                writer_ = new FileWriter(new File(dir_, stem_ + "." + time
                        + ".txt"));
            }
        }
    }


    @Override
    public void write(char[] cbuf, int off, int len) throws IOException {
        synchronized (lock) {
            rollover();
            writer_.write(cbuf, off, len);
        }
    }
}
4 голосов
/ 21 марта 2011

Используйте RamdomAccessFile в java для перемещения курсора в файле.

Перед началом копирования проверьте время изменения / создания файла (в случае новых файлов), если менее 2 минут, то только начать копированиеили же пропустите его.

Сохраните счетчик прочитанных байтов / строк для каждого файла.переместите курсор в эту позицию и прочитайте его оттуда.

1 голос
/ 21 марта 2011

Вы можете дублировать файл, не используя операции чтения и записи.

пример кода:

FileChannel ic = new FileInputStream("<source file location>")).getChannel();
FileChannel oc = new FileOutputStream("<destination location>").getChannel();
ic.transferTo(0, ic.size(), oc);
ic.close();
oc.close(); 

HTH

0 голосов
/ 21 марта 2011

Файл io прост в java, вот пример, который я нашел в Интернете, как скопировать файл в другой файл.

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Copy {
  public static void main(String[] args) throws IOException {
    File inputFile = new File("farrago.txt");
    File outputFile = new File("outagain.txt");

    FileReader in = new FileReader(inputFile);
    FileWriter out = new FileWriter(outputFile);
    int c;

    while ((c = in.read()) != -1)
      out.write(c);

    in.close();
    out.close();
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...