簡體   English   中英

無法將輸入寫入文件

[英]Unable to write input into a file

我已經嘗試了很多次以讀取用戶輸入,然后將其寫入文件,但是我沒有找到解決方案。 這是我的代碼...

主班。

import java.util.HashMap;
import java.util.Scanner;

public class cShell{
    static String Currentpath="C:\\";
    public String Current = Currentpath;
    static HashMap<String, ICommand> myhashData=new HashMap<String, ICommand>();

    public static void main(String[] args)
    {
        myhashData.put("ltf", new cITF());
        myhashData.put("nbc", new cNBC());
        myhashData.put("gdb", new cGDB());
        myhashData.put("Tedit", new cTedit());

        String Input = "";
        do{
            System.out.print(Currentpath+"> ");
            //String Input = "";
            Scanner scan = new Scanner(System.in);
            if(scan.hasNext()){
                Input = scan.nextLine().trim();             
            }

            if(Input.equals("exit")){
                System.exit(0);
            }

            if(myhashData.containsKey(Input)){
                ICommand myCommand=myhashData.get(Input);
                myCommand.Execute();
            }
            else{
                System.out.println("Invalid Command");
            }

        }while(!Input.equals("exit"));
    }
}

這是進行讀寫的類。

import java.util.*;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
//import java.lang.System.*;

public class cTedit implements ICommand{

    @Override
    public void Execute() {         
        String filename = "";
        System.out.println("Enter the file name to be edited");
        Scanner scan = new Scanner(System.in);
        if(scan.hasNext()){
            filename = scan.nextLine();
        }

        String line = null;
        try{
            InputStreamReader ISR = new InputStreamReader(System.in);
            //FileReader fileReader = new FileReader(ISR);
            FileWriter fileWriter = new FileWriter(cShell.Currentpath+"\\"+filename);
            BufferedReader bufferedReader = new BufferedReader(ISR);
            System.out.println("Enter text into the file");
            while((line = bufferedReader.readLine()) != null){
                 fileWriter.write(line);
            }
        bufferedReader.close();
        }catch(FileNotFoundException ex){
            System.out.println("Unable to open file '" + filename + "'");
        }
        catch(IOException ex){
            System.out.println("Error reading file '" + filename + "'");
        }
    }
}

我的問題是當我輸入一些文本作為用戶輸入時,按Enter並不能阻止我輸入輸入,但是當我按Ctrl + z時,它陷入了無限循環。

cTedit類中嘗試這一方法。

在您的情況下, bufferedReader.readLine()絕不會返回null

輸入exit循環。

    while((line = bufferedReader.readLine()) != null){
         if(line.equals("exit")){
           break;
         }
         fileWriter.write(line);
     }

最后使用fileWriter.close()

也許這不是問題的根源,但我認為您無需檢查hasnext()條件即可讀取一行:

if(scan.hasNext()){
     filename = scan.nextLine();
}

只是filename = scan.nextLine(); 應該足夠了。

使用以下

 if(Input.equals("exit") || Input.equals("")){
                System.exit(0);
 }

代替

 if(Input.equals("exit")){
                System.exit(0);
}

為了關閉fileWriter只是退出添加一個方法之前,之后closeFile如下。

導入java.util。 ; 導入java.io。 ; 導入java.nio.file.Files; 導入java.nio.file.Path; //導入java.lang.System。*;

公共類cTedit實現ICommand {私有FileWriter fileWriter; @Override public void Execute(){// TODO自動生成的方法存根

String filename = "";
System.out.println("Enter the file name to be edited");
Scanner scan = new Scanner(System.in);
if(scan.hasNext()){
    filename = scan.nextLine();
}

String line = null;

try{

    InputStreamReader ISR = new InputStreamReader(System.in);
    //FileReader fileReader = new FileReader(ISR);
    fileWriter = new FileWriter(cShell.Currentpath+"\\"+filename);

      BufferedReader bufferedReader = new BufferedReader(ISR);
    System.out.println("Enter text into the file");
    while((line = bufferedReader.readLine()) != null){
         fileWriter.write(line);
     }
     bufferedReader.close();
}catch(FileNotFoundException ex){
    System.out.println("Unable to open file '" + filename + "'");
}
catch(IOException ex){
    System.out.println("Error reading file '" + filename + "'");
} finally {
    fileWriter.close();
}

}

 public void closeFile() {
     fileWriter.close();
 }

}

然后callCloseFilecShell類之前退出

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM