-2

シリアル化されたファイルをソース フォルダーからターゲット フォルダーにコピーするプログラムを作成する必要があります。

ソース フォルダは C:\ter\ (5 つの異なるシリアル化されたファイル gfr.ser、asd.ser、hgf.ser、kiu.ser、uew.ser があります) ターゲット フォルダは C:\bvg\ です。

転送するファイルは gfr.ser,asd.ser,hgf.ser,kiu.ser,uew.ser

以下のプログラムを思いつきましたが、シリアル化された 1 つのファイル gfr.ser のみをコピーします。5 つのシリアル化されたファイルすべてを一度にコピーする方法を教えてください。

  class ScheduledTask extends TimerTask {

        public void run() {
            InputStream inStream = null;
            OutputStream outStream = null;
            try {
                File source = new File("C:\\ter\\");
                File target = new File(" C:\\bvg\\");


                  if (target.exists()){   // Already exists. do not copy
                     return;
                }
               File[] files = source.listFiles();
               for(File file:files){   
                   inStream = new FileInputStream(file);
                    outStream = new FileOutputStream(target);
                       }

                byte[] buffer = new byte[1024];
                int length;
                // copy the file content in bytes
                while ((length = inStream.read(buffer)) > 0) {
                    outStream.write(buffer, 0, length);
                }
                inStream.close();
                outStream.close();
                System.out.println("File is copied successful!");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public class Copycache {
        public static void main(String args[]) throws InterruptedException {
            Timer time = new Timer();
        ScheduledTask task = new ScheduledTask();
        time.schedule(task, new Date(), TimeUnit.SECONDS.toMillis(1));
        }

    }

私はこのアプローチを思いつきましたが、まだ機能していません。ファイルが最終的にコピーされないのでアドバイスしてください...スタックトレースの下...

java.io.FileNotFoundException: C:\bvg\ (Access is denied)
    at java.io.FileOutputStream.open(Native Method)
    at java.io.FileOutputStream.<init>(Unknown Source)
    at java.io.FileOutputStream.<init>(Unknown Source)
    at com.bvb.ScheduledTask.run(Copycache.java:31)
    at java.util.TimerThread.mainLoop(Unknown Source)
    at java.util.TimerThread.run(Unknown Source)
4

1 に答える 1

0

ソースフォルダーのすべてのファイルを宛先にコピーする場合は、以下のリンクに記載されているソリューションを確認できます。

ソリューションリンク

これが私がテストした実用的なソリューションです:(私は別のStackOverFlow回答からいくつかのコードスニペットを取りました)

参考:StackOverFlow アンサー

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.util.TimerTask;

class ScheduledTask extends TimerTask {

    public static void main(String[] args) {
        new ScheduledTask().run();
    }

    public void run() {
        try {
            File source = new File("c:\\ter\\");
            File target = new File("c:\\bvg\\");

            if (target.exists()) { // Already exists. do not copy
                return;
            }
            else
            {
                target.mkdir();
            }
            File[] files = source.listFiles();
            for (File file : files) {
                File fileSource = new File(source + "\\"+file.getName());
                File fileTarget = new File(target + "\\"+file.getName());

                copyFile(fileSource,fileTarget);
                System.out.println("File is copied successful! :" + file.getName());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void copyFile(File sourceFile, File destFile) throws IOException {
        if(!destFile.exists()) {
            destFile.createNewFile();
        }

        FileChannel source = null;
        FileChannel destination = null;

        try {
            source = new FileInputStream(sourceFile).getChannel();
            destination = new FileOutputStream(destFile).getChannel();
            destination.transferFrom(source, 0, source.size());
        }
        finally {
            if(source != null) {
                source.close();
            }
            if(destination != null) {
                destination.close();
            }
        }
    }
}
于 2013-02-03T07:29:51.933 に答える