【问题标题】:Whenever I use scanner to write in a file,it just prints one word in the file每当我使用扫描仪写入文件时,它只会在文件中打印一个字
【发布时间】:2022-11-22 22:12:14
【问题描述】:
import java.io.*;
import java.util.Scanner;

public class create {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        String fileStr="javaDemo.txt";
        File f1=new File("D://downloads//"+fileStr);
        try{
            System.out.println("Give content:");
            String data=sc.next();
            FileWriter writer=new FileWriter(f1.getAbsolutePath());
            BufferedWriter bufferedWriter=new BufferedWriter(writer);
            bufferedWriter.write(data);
            bufferedWriter.close();
        }catch (Exception e){
            System.out.println("error:"+e);
            e.printStackTrace();
        }

    }
}

Output

file

预期输出:Hello world文件中的文本

实际输出:文件中只有Hello文本

【问题讨论】:

  • 你读过Scanner::next的文档了吗?
  • 好吧......你只读一次,然后写,把代码放在一个循环中

标签: java file


【解决方案1】:

扫描仪开始使用“任何空格”作为分隔符。 next() 检索下一个标记,标记定义为“分隔符之间的标记”。换句话说,它让你得到 1 个字。

您可能希望 Scanner 将“新行”视为分隔符。然后,“分隔符之间的内容”是整行,这似乎是您想要的。在这种情况下,只需告诉它:

scanner.useDelimiter("\R");

是它所需要的。 \R 是“任何换行符”的正则表达式。由于操作系统的差异,对于什么是换行符有一些不同的理解,幸运的是,\R 是一个方便的包罗万象。

注意:使用扫描仪进行键盘输入?您可能也应该始终像这样设置分隔符;通常,几乎所有用户输入都是通过按回车键分离出来的,因此开箱即用的扫描仪不适合处理键盘输入。尽管 99.99% 的堆栈溢出示例都这样做,这很不幸。

【讨论】:

    【解决方案2】:

    您正在使用 sc.next() 读取直到第一个空格,如果您想读取整行,您应该使用 sc.readLine() 方法读取所有行,直到用户插入 Enter 为止。

    此外,当使用上述所有资源时,您应该记住在最后一个块中关闭它们,或者更好地使用 try-with-resources,如下所示:

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        File file = new File("javaDemo.txt");
    
        System.out.println("Give content:");
    
        try (FileWriter writer = new FileWriter(file.getAbsolutePath());
             BufferedWriter bufferedWriter = new BufferedWriter(writer)
        ) {
            String data = sc.nextLine();
            bufferedWriter.write(data);
        } catch (IOException e) {
            System.out.println("error:" + e);
            e.printStackTrace();
        }
    }
    

    如果你想在文件中写入多行,用一个循环包裹 try 的主体,这个循环将从用户那里读取并将其写入文件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多