java - 文件编写器和空格?

标签 java filewriter

我被要求编写一个作业,其中将提示用户输入键和/或值。

到目前为止,这是我的代码:

import java.util.Scanner;
import java.io.*;

class bTree
{
    //Fields


    static Scanner input = new Scanner(System.in);

    static boolean done = false;

    public static void main(String args[])throws Exception
    {
        FileWriter fWriter = new FileWriter("data.txt");
        do
        {
            System.out.print("Enter command: ");
            String enter[] = input.nextLine().split(" ", 3);

            if(enter[0].toLowerCase().equals("insert"))
            {

                fWriter.write(enter[1] + "\n" + enter[2] + "\n");
                fWriter.flush();
            }
            else if(enter[0].toLowerCase().equals("select"))
            {
                FileReader fReader = new FileReader("data.txt");
                Scanner fileInput = new Scanner(fReader);

                while(fileInput.hasNext() && done == false)
                {
                    if(fileInput.nextLine().equals(enter[1]))
                    {
                        System.out.println(fileInput.nextLine());
                        done = true;
                    }
                    else
                    {
                        fileInput.nextLine();
                    }
                }
                done = false;
            }
            else if(enter[0].toLowerCase().equals("update"))
            {

                fWriter.write(enter[2]);
                fWriter.flush();
            }
            else if(enter[0].toLowerCase().equals("exit"))
            {
                System.exit(0);
            }
        }
        while(true);
    }
}

问题:当我打开 data.txt 时,没有空格。因此,如果我在记事本中输入“插入 1001 gen”和“10001 genny”,它将显示为“1001gen10001genny”。有什么建议吗?

最佳答案

问题是 notepad.exe 对行结尾很挑剔,并且有很多可能性。当您将 "\n" 写入 FileWriter 时,它会写入一个字符,即 '\n'。但记事本需要序列 "\r\n" 。它将单个“\n”显示为什么都没有

这是您的代码,稍作修改以解决一些陷阱。

package so7696816;

import java.io.FileReader;
import java.io.PrintWriter;
import java.util.Locale;
import java.util.Scanner;

public class Excercise {

  public static void main(String args[]) throws Exception {
    final Scanner input = new Scanner(System.in);
    PrintWriter fWriter = new PrintWriter("data.txt");

    while (true) {
      System.out.print("Enter command: ");
      String enter[] = input.nextLine().split(" ", 3);
      final String command = enter[0].toLowerCase(Locale.ROOT);

      if (command.equals("insert")) {
        fWriter.println(enter[1]);
        fWriter.println(enter[2]);
        fWriter.flush();

      } else if (command.equals("select")) {
        FileReader fReader = new FileReader("data.txt");
        Scanner fileInput = new Scanner(fReader);
        while (fileInput.hasNextLine()) {
          String key = fileInput.nextLine();
          String value = fileInput.nextLine();
          if (key.equals(enter[1])) {
            System.out.println(value);
            break;
          }
        }
        fReader.close(); // don't leave files open

      } else if (command.equals("update")) {
        fWriter.write(enter[2]);
        fWriter.flush();

      } else if (command.equals("exit")) {
        return;

      } else {
        System.err.println("Unknown command: " + command);
      }
    }
  }
}

备注:

  • 我使用 PrintWriter 而不是 FileWriter 来获得正确的行结尾。
  • 对于 select 命令,我在使用后关闭了 fReader
  • 我避免多次输入 enter[0].toLowerCase()
  • 我使用了 toLowerCase 的正确变体。
  • 我添加了对未知命令的错误处理。
  • 我重写了 select 命令,使其更加简洁。

关于java - 文件编写器和空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7696816/

相关文章:

java - 没有ORM的多对多关系中的模型结构

java - 从文件夹中采样文件

java - 将标记化字符串写入文本文件?

Java 在 if 语句处终止,退出值 0

java - 在webapp文件夹中动态添加.xhtml文件

java - 是否可以使用 java.util.Scanner 检测单个 Enterkey?

java - 在进入页面时创建了许多 session ,而不是一个。为什么?

java - 使用嵌入式 Jetty 将参数传递给资源

java - 将数据附加到 HDFS Java 中的现有文件

java - write() 方法无法识别 TextArea