JAVA - проблема с записью в файл, но программа не закончит - PullRequest
1 голос
/ 26 марта 2020
import java.util.*;
import java.io.*;

public class CopyFile {
    static Scanner sc = new Scanner(System.in);
    public static void main (String[] args) throws IOException{
        File fin = new File("");
        File fout = new File("");
        // nome dos ficheiros de entrada e saida
        if(args.length==1){
            fin = new File(args[0]);
            System.out.print("Ficheiro de saida: ");
            fout = new File(sc.nextLine());
        }else if(args.length==2){
            fin = new File(args[0]);
            fout = new File(args[1]);
        }else if(args.length==0){
            System.out.print("Ficheiro de entrada: ");
            fin = new File(sc.nextLine());
            System.out.print("Ficheiro de saida: ");
            fout = new File(sc.nextLine());
        }
        // condiçoes do ficheiro de entrada
        do{
            if(fin.exists()==false){
                System.out.print("O ficheiro de entrada não existe, volte a introduzir um novo ficheiro: ");
                fin = new File(sc.nextLine());
            }else if(fin.canRead()==false){
                System.out.print("O ficheiro de entrada nao pode ser lido, volte a introduzir um novo ficheiro: ");
                fin = new File(sc.nextLine());
            }
        }while(fin.exists()==false);
        // condiçoes do ficheiro de saida
        do{
            if(fout.canWrite()==false){
                System.out.print("O ficheiro de saida nao pode ser modificado, volte a introduzir um novo ficheiro: ");
                fout = new File(sc.nextLine());
            }
        }while(fout.canWrite()==false);

        Scanner scf = new Scanner (fin); //para o ficheiro de entrada ser lido
        PrintWriter pw = new PrintWriter(fout); // para o escrever sobre o ficheiro de saida

        do{
            pw.println(scf.hasNextLine());
        }while(scf.hasNextLine()==true);

        scf.close();
        pw.close();
    }
}

У меня есть вопрос, потому что, прежде чем это произойдет нормально. Я спрашиваю только файлы, и после того, как я ввожу последний файл, похоже, что они хотят что-то еще написать, и я не понимаю, почему, и программа не завершает sh. Файл, который я рассматривал, был один с ничего (файл из) и один с вещами, написанными как (файл в)

ASDASd
sdfsdfs
fqgqerqe
erqertq
do{
    pw.println(scf.hasNextLine());
}while(scf.hasNextLine()==true);

1 Ответ

4 голосов
/ 26 марта 2020

Вы никогда не продвигаете этот сканер - вы просто продолжаете запрашивать hasNextLine(), который вернет true бесконечно. Похоже, вы хотели написать nextLine() в вывод:

do {
    pw.println(scf.nextLine()); // Here
} while (scf.hasNextLine()); // Note, BTW, that the "== true" is redundant.
...