Что не так с кодом Java ниже? - PullRequest
0 голосов
/ 28 марта 2012

Вот код.

import java.nio.file.*;
import java.io.*;

public class FileCopy{

    public static void main(String[] args){

        String sourcePath=new String();
        String targetPath=new String();
        StreamTokenizer token=new StreamTokenizer(
                    new BufferedReader(         
                        new InputStreamReader(System.in)));
        int type=0;
        token.wordChars('*','*');
        token.wordChars(':',':');
        token.wordChars('/','/');
        token.wordChars('.','.');

        try{

            System.out.print("Please type in the source path:");
            if((type=token.nextToken())==StreamTokenizer.TT_WORD)
                sourcePath=token.sval;
            System.out.print("Please type in the target path:");
            if((type=token.nextToken())==StreamTokenizer.TT_WORD)
                targetPath=token.sval;
        }catch(IOException e){
            e.printStackTrace();
        }

        Path source=Paths.get(sourcePath);
        Path target=Paths.get(targetPath);
        System.out.println("Please enter to create the sourcePath and the files...");
        Enter();
        Enter();

        createDir(source);

        String forResolve=new String();     
        for(int i=1;i<10;i++){
            forResolve=new StringBuilder(String.valueOf(i)).append(".txt").toString();
            createFile(source.resolve(forResolve));
        }

        System.out.println("Please enter to create the targetPath and the files...");
        Enter();

        if(Files.notExists(target))
            createDir(target);
        try(DirectoryStream<Path> contents=Files.newDirectoryStream(source,"*.*")){


            System.out.println("Please enter to start copying...");
            Enter();

            int count=1;
            for(Path temp:contents){

                copyFile(source, target.resolve(temp.getFileName().toString()));
                count++;
            }
            System.out.println("Copy files complete...");
        }catch(IOException e){
            e.printStackTrace();
        }


    }

        static void createFile(Path path){
            try{
                Files.createFile(path);
            }catch(IOException e){
                e.printStackTrace();
            }
        }

    static void createDir(Path path){
        try{
            Files.createDirectories(path);
        }catch(IOException e){
            e.printStackTrace();
        }
    }

    static void Enter(){
        try{
            System.in.read();
        }catch(IOException e){
            e.printStackTrace();
        }
    }

    static void copyFile(Path source, Path target){
        try{                    
                Files.copy(source, target);
        }catch(IOException e){
            e.printStackTrace();
        }
    }

}

Целью кода является копирование файлов из исходного каталога в целевой каталог. Тем не менее, когда я запускаю программу, я получаю в целевом каталоге несколько папок с такими же именами, что и у файлов в исходном каталоге. Другими словами, если в исходном каталоге есть имя файла «hello.txt», после запуска программы в целевой папке будет имя «hello.txt». Кто-нибудь может сказать мне, что не так с кодом выше? Заранее спасибо.

1 Ответ

0 голосов
/ 28 марта 2012

Кажется, что основная проблема заключается в определении целевого пути, а затем этот метод

static void createDir(Path path){
        try{
            Files.createDirectories(path);
        }catch(IOException e){
            e.printStackTrace();
        }
    }

работает неправильно и создает весь путь как каталоги.

...