java new Filereader_java中的new BufferedReader(new InputStreamReader(System.in))
时间: 2024-02-02 11:04:41 浏览: 64
`new FileReader(file)` 是用来读取文件的,而 `new BufferedReader(new InputStreamReader(System.in))` 是用来从控制台读取输入的。
具体来说,`BufferedReader` 是一个字符缓冲输入流,它可以按行读取文本文件或从控制台读取输入。`InputStreamReader(System.in)` 则是将标准输入流 `System.in` 转换为字符流,以便对其进行缓冲和处理。这样,我们就可以使用 `BufferedReader` 对控制台输入进行缓冲和处理了。
例如,以下代码片段演示如何使用 `BufferedReader` 从控制台读取用户输入的文本行:
```java
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String line = reader.readLine();
System.out.println("You entered: " + line);
```
在这个例子中,`readLine()` 方法将阻塞程序,直到用户在控制台上输入一行文本。读取到文本行后,该方法会返回该行文本,我们将其存储在 `line` 变量中,并输出到控制台。
相关问题
import java.io.*; public class xhj3 { public static void main(String[] args) throws IOException{ int sum = 0; System.out.println("请输入用户密码:"); BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String psw =in.readLine(); while( !psw.equals("use123")) { sum++; if (sum < 2) { System.err.println("密码错误, 请重新输入:"); psw = in.readLine(); }else{ System.out.println("两次密码错误,退出程序!"); System.exit(0); } } String str; FileReader fr = new FileReader("src/program2/score.txt"); BufferedReader bf = new BufferedReader(fr); while ((str = bf.readLine()) != null) { System.out.println(str); } fr.close(); bf.close(); } }该代码中涉及的Java知识
该代码涉及的Java知识包括:
1. 输入输出流:使用 System.in 和 BufferedReader 类读取用户输入的密码,使用 FileReader 和 BufferedReader 类读取文件内容。
2. 异常处理:使用 throws IOException 抛出输入输出异常。
3. 循环语句:使用 while 循环判断用户输入的密码是否正确,如果错误则提示用户重新输入,并计数器加一,如果连续两次输入错误则退出程序。
4. 条件语句:使用 if-else 语句判断密码输入错误的次数和文件读取是否结束。
5. 文件操作:使用 FileReader 和 BufferedReader 类读取文件内容,使用 fr.close() 和 bf.close() 方法关闭文件流。
怎么优化这串代码Scanner sc1 = new Scanner(System.in); System.out.println("请输入您要查找的序号:"); String num = sc1.nextLine(); judgeSearch jud = new judgeSearch(); try(FileReader fr = new FileReader(file); BufferedReader br = new BufferedReader(fr)){ if(1 == jud.judge(num)){ while (true) { String line = br.readLine(); String[] str = line.split(" ");//分割 if (str[0].equals(num)) { System.out.println(line); break; } } } if(0 == jud.judge(num)){ System.out.println("没有该商品!"); break; }
根据这段代码,我给出以下几点优化建议:
1. 对于输入的序号进行校验,避免用户输入非法数据。比如可以使用正则表达式判断输入是否为数字等有效格式。
2. 考虑到文件较大时,读取文件的效率较低,在读取文件数据时考虑使用缓存来提高读取效率。可以使用 BufferedInputStream 来进行缓存读取文件数据。
3. 可以使用 try-with-resources 语句来自动关闭资源,避免忘记手动关闭资源导致资源泄漏。
4. 可以将读取文件数据的代码封装成一个方法,提高代码的复用性和可读性。
下面是对原代码进行上述优化后的示例代码:
```java
try (Scanner sc1 = new Scanner(System.in);
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
BufferedReader br = new BufferedReader(new InputStreamReader(bis))) {
System.out.println("请输入您要查找的序号:");
String num = sc1.nextLine();
if (!num.matches("\\d+")) {
System.out.println("输入的序号格式不正确!");
return;
}
if (judgeSearch.judge(num) != 1) {
System.out.println("没有该商品!");
return;
}
String line;
while ((line = br.readLine()) != null) {
String[] str = line.split(" ");
if (str[0].equals(num)) {
System.out.println(line);
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}
```
需要注意的是,以上代码仅供参考,具体优化方式还需根据实际情况进行调整。
阅读全文