从文件更改位置

时间:2015-03-30 19:43:34

标签: java windows nio

情况:我有一个游戏,在这个游戏中你可以用游戏记录器(由游戏提供)记录游戏,但是你无法设置录制文件的目的地。所有文件都将保存在游戏文件夹中。所以我决定编写一个程序来实时识别是否创建了* .avi文件,如果不再使用(记录完成),它将被移动到另一个目的地。检查文件是否正在使用中工作正常,但是当我想移动文件的目标时,我得到一个 java.nio.file.FileAlreadyExistsException 那是我当前的代码:

package ca.filemover;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardWatchEventKinds;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
import java.util.List;

public class CAWatcher {


    public static void main(String[] args) {

        System.out.println("Scan the combat arms folder...");

        while (true) {
            Path path = Paths.get("C:\\Nexon\\Combat Arms EU");

            try {
                WatchService watcher = path.getFileSystem().newWatchService();
                path.register(watcher, StandardWatchEventKinds.ENTRY_CREATE);

                WatchKey watckKey = watcher.take();

                List<WatchEvent<?>> events = watckKey.pollEvents();
                for (WatchEvent<?> event : events) {

                    String fileName = event.context().toString();
                    String filePath = path.toString();
                    String source = filePath + "\\" + fileName;

                    while (true) {
                        if (event.context().toString().contains(".avi")) {

                            if (isFileUnlocked(source)) {

                                changeFileDest(source, fileName);
                                break;

                            }
                        }
                    }

                }

            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    }

    public static boolean isFileUnlocked(String sourceFile) {
        File fileLoc = new File(sourceFile);
        return fileLoc.renameTo(fileLoc);

    }

    public static boolean changeFileDest(String source, String fileName) {

        Path moveSourcePath = Paths.get(source);
        Path moveTargetPath = Paths.get("D:\\Desktop\\CA Videos\\Reports\\" + fileName);

        try {
            Files.move(moveSourcePath, moveTargetPath);

        } catch (IOException e) {

            e.printStackTrace();
        }
        return false;

    }

}   
  

java.nio.file.FileAlreadyExistsException:D:\ Desktop \ CA.   视频\报告\ CA_2015_03_30_42.avi at   sun.nio.fs.WindowsFileCopy.move(未知来源)at   sun.nio.fs.WindowsFileSystemProvider.move(未知来源)at   java.nio.file.Files.move(未知来源)at   ca.filemover.CAWatcher.changeFileDest(CAWatcher.java:73)at   ca.filemover.CAWatcher.main(CAWatcher.java:44)

提前致谢。

0 个答案:

没有答案