我需要一个程序,要求用户在文件中逐行输入要保存的信息。我该怎么办?

时间:2019-05-25 17:21:17

标签: java

我需要一个程序,要求用户在文件中逐行输入要保存的信息。我该怎么办?

它必须看起来像这样:

Please, choose an option:

1. Read a file

2. Write in a new file

2

File name? problema.txt

How many lines do you want to write? 2


Write line 1: Hey

Write line 2: How are you?

Done! The file problema.txt has been created and updated with the content given. 

我以各种方式尝试过,但没有成功。首先,我已在二维数组中完成此操作,但是我无法跳到下一行。

然后我使用不带数组的“ .newline”方法尝试了此操作,但是它不允许我保存多个单词。

尝试1

System.out.println("How many lines do you want to write? ");
int mida = sc.nextInt();


PrintStream escriptor = new PrintStream(f);
String [][] dades = new String [mida][3];

for (int i = 0; i < dades.length; i++) {

  System.out.println("Write line " + i + " :");
  for (int y=0; y < dades[i].length; y++) {

    String paraula = sc.next();
    System.out.println(paraula + " " + y);

    dades[i][y] = paraula;

    escriptor.print(" " + dades[i][y]);


  }
  escriptor.println();
}

尝试2

System.out.println("How many lines do you want to write? ");
int mida = sc.nextInt();

PrintStream escriptor = new PrintStream(f);
BufferedWriter ficheroSalida = new BufferedWriter(new FileWriter(new File(file1)));

for (int i = 0; i < mida; i++) {

  System.out.println("Write line " + i + " :");
  String paraula = sc.next();
  ficheroSalida.write (paraula);
  ficheroSalida.newLine();
  ficheroSalida.flush();

}

System.out.println("Done! The file " + fitxer + " has been created and updated with the content given. ");

escriptor.close();

尝试1:

Write line 1: Hey How are

Write line 1: you...

尝试2:

Write line 1: Hey

Write line 2: How

Write line 3: are

Write line 4: you

Write line 5: ?

2 个答案:

答案 0 :(得分:0)

嗯,您快到了。首先,我将使用java.io.FileWriter来将字符串写入文件。

如果您只想将行写入文件中,则实际上并不需要在此处使用数组。

您还应该使用try-with-resources语句来创建您的编写器。这样可以确保即使发生错误也可以调用escriptor.close()。在这种情况下,您也不需要调用.flush(),因为这将在关闭句柄之前完成。您打算自己执行此操作很好,但是总的来说,在可能的情况下使用这种特殊类型的语句更安全。

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

public class Example {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        File f = new File("/tmp/output.txt");

        System.out.println("How many lines do you want to write? ");
        int mida = sc.nextInt();
        sc.nextLine(); // Consume next empty line

        try (FileWriter escriptor = new FileWriter(f)) {

            for (int i = 0; i < mida; i++) {
                System.out.println(String.format("Write line %d:", i + 1));
                String paraula = sc.nextLine();
                escriptor.write(String.format("%s\n", paraula));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

答案 1 :(得分:0)

如果文本文件很小并且不需要使用streamreader / streamwriters,则可以阅读文本,添加所需内容,然后重新写入。检查此示例:

public class ReadWrite {
    private static Scanner scanner;

    public static void main(String[] args) throws FileNotFoundException, IOException {
        scanner = new Scanner(System.in);
        File desktop = new File(System.getProperty("user.home"), "Desktop");
        System.out.println("Yo, which file would you like to edit from " + desktop.getAbsolutePath() + "?");
        String fileName = scanner.next();
        File textFile = new File(desktop, fileName);
        if (!textFile.exists()) {
            System.err.println("File " + textFile.getAbsolutePath() + " does not exist.");
            System.exit(0);
        }

        String fileContent = readFileContent(textFile);

        System.out.println("How many lines would you like to add?");

        int lineNumber = scanner.nextInt();

        for (int i = 1; i <= lineNumber; i++) {
            System.out.println("Write line number #" + i + ":");
            String line = scanner.next();
            fileContent += line;
            fileContent += System.lineSeparator();
        }

        //Write all the content again
        try (PrintWriter out = new PrintWriter(textFile)) {
            out.write(fileContent);
            out.flush();
        }
        scanner.close();
    }

    private static String readFileContent(File f) throws FileNotFoundException, IOException {
        try (BufferedReader br = new BufferedReader(new FileReader(f))) {
            StringBuilder sb = new StringBuilder();
            String line = br.readLine();

            while (line != null) {
                sb.append(line);
                sb.append(System.lineSeparator());
                line = br.readLine();
            }
            String everything = sb.toString();
            return everything;
        }
    }
}

示例的执行如下:

Yo, which file would you like to edit from C:\Users\George\Desktop?
hello.txt
How many lines would you like to add?
4
Write line number #1:
Hello
Write line number #2:
Stack
Write line number #3:
Over
Write line number #4:
Flow

文件包含以下内容:

Hello
Stack
Over
Flow

如果再次运行,请输入以下内容:

Yo, which file would you like to edit from C:\Users\George\Desktop?
hello.txt
How many lines would you like to add?
2
Write line number #1:
Hey
Write line number #2:
too

文本文件将包含:

Hello
Stack
Over
Flow
Hey
too

但是,如果您尝试使用大文件,则内存不足,因此将抛出OutOfMemoryError。但是对于小文件,没关系。