Java有关Scanner输入的问题

going__ 2018-04-02 10:48:03
使用IO流做控制台版本的记事本的时候遇到一个不理解的异常,求各位指教一下
package com.notepad;
import java.io.*;
import java.util.*;
public class IONotepad {
private static String filepath;
private static String message;
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
System.out.println("--1.新建文件 2.打开文件 3.修改文件 4.保存 5.退出 --");
while(true) {
System.out.println("请输入操作指令:");
int order = sc.nextInt();
switch(order)
{
case 1:
creatfile();
break;
case 2:
openfile();
break;
case 3:
editfile();
break;
case 4:
savefile();
break;
case 5:
exit();
break;
default:
System.out.println("你输入的指令有误!!!");
break;
}
}
}
private static void creatfile() {
message = "";
Scanner sc = new Scanner(System.in);
System.out.println("请输入内容,停止编写请输入\"stop\":");
StringBuffer sb = new StringBuffer();
String inputMessage = "";
while(!inputMessage.equals("stop")) {
if(sb.length() > 0) {
sb.append("\r\n");
}
sb.append(inputMessage);
inputMessage = sc.nextLine();
}
message = sb.toString();
sc.close();
}

private static void openfile() throws Exception {
message = "";
Scanner sc = new Scanner(System.in);
System.out.println("请输入要打开文件的位置:");
filepath = sc.next();
if(filepath != null && !filepath.endsWith(".txt")) {
System.out.println("请选择文本文件!");
return;
}
FileReader fr = new FileReader(filepath);
char[] charArray = new char[1024];
int len = 0;
StringBuffer st = new StringBuffer();
while((len = fr.read(charArray)) != -1) {
st.append(charArray);
}
message = st.toString();
System.out.println("打开文件内容:"+"\r\n"+message);
fr.close();
sc.close();
}
/**
* 修改文件内容,以字符串替换的形式
*/
private static void editfile() {
if(message == "" && filepath == null) {
System.out.println("请先新建文件或者打开文件");
return;
}
Scanner sc = new Scanner(System.in);
System.out.println("请输入要修改的内容(以\"修改的目标文字:修改之后的文字\"格式),"+"停止修改请输入\"stop\":");
String inputMessage = "";
while(!inputMessage.equals("stop")) {
inputMessage = sc.nextLine();
if(inputMessage != null && inputMessage.length() > 1) {
//将输入的文字根据“:”拆分为两个数组
String[] editMessage = inputMessage.split(":");
if(editMessage != null && editMessage.length > 1) {
message = message.replace(editMessage[0], editMessage[1]);
}
}
}
System.out.println("修改后的内容:" + "\r\n" + message);
}
/**
* 保存 新建文本存在用户输入的目录下,然后打开原文件进行覆盖
* @throws IOException
*/
private static void savefile() throws IOException {
Scanner sc =new Scanner(System.in);
FileWriter out =null;
if(filepath != null) {
out = new FileWriter(filepath);
}else {
System.out.println("请输入文件保存的绝对地址:");
String path = sc.next();
filepath = path;

if(!filepath.toLowerCase().endsWith(".txt")) {
filepath += ".txt";
}
out = new FileWriter(filepath);
}
out.write(message);
out.close();
message = "";
filepath = null;
}

private static void exit() {
System.out.println("系统已经退出,谢谢使用 !");
System.exit(0);
}
}


这是异常结果
异常代码定位再 int order = sc.nextInt();这句话
...全文
607 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
hwqwqwqqewweqw 2018-04-04
  • 打赏
  • 举报
回复
如关掉Scanner 应该在main方法的最后面 方法里面关掉的话,那么你调用这个方法后Scanner类就关掉了,再次执行Scanner类的方法就会抛出异常,放在main方法最后面 不影响其他所有的Scanner操作
miaoch 2018-04-03
  • 打赏
  • 举报
回复
你在openFile里close了Scanner,Scanner就把System.in也close了。然后你在main里又调用了sc.nextInt(),此时System.in已经被关闭了,就抛异常了

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧