【问题标题】:Copying user input text to output text file (java)将用户输入文本复制到输出文本文件(java)
【发布时间】:2020-02-02 08:53:52
【问题描述】:

这是我的 java 类的分配。我必须创建用户输入并将其放入输入文件(InputFile.txt),然后通过输出文件(OutPutFile.txt)提交此文本。问题和示例文本如下:

编写一个程序,打开一个文本文件(InputFile.txt)并读取输入。该文件包含如下所示的字符串行:

这是第一行。

这是第二行。

这是第三行。

这是第四行。

将输入字符串更改为大写 ("THIS IS LINE ONE.") 将大写行写入 OutputFile.txt。请务必从输入文件中读取所有行。

除了将文本放入输出并显示出来之外,我几乎已经完成了所有工作。下面是我的代码以及我不断得到的结果。我知道我在某个地方搞砸了,我只是不知道在哪里。

任何帮助/建议都会有很大帮助。谢谢!!

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

public class Main {
    public static void main(String[] args) throws IOException {
        FileInputStream fileByteStream = null;
        Scaner inFS = null;
        String InputFile;

        fileByteStream = new FileInputStream("InputFile.txt");
        inFS = new Scanner(fileByteStream);

        while (inFS.hasNextLine()) {
            System.out.println(inFS.nextLine());
        }
        fileByteStream.close();

        FileOutputStream fileStream = new FileOutputStream("OutputFile.txt");
        PrintWriter outFS = new PrintWriter(fileStream);

        outFS.print(inFS);
        outFS.close();
    }
}

结果:java.util.Scanner[delimiters=\p{javaWhitespace}+][position=77][match valid=false][need input=false][source closed=true][skipped=false][group separator=\,][decimal separator=\.][positive prefix=][negative prefix=\Q-\E][positive suffix=][negative suffix=][NaN string=\QNaN\E][infinity string=\Q∞\E]

【问题讨论】:

  • 您的代码不应编译。你的扫描器不正确,大部分类不属于 java.util.io 包
  • 很抱歉。我一直在做这个问题几个小时,我什至没有意识到我遇到的所有错误。我真的把这个搞砸了XD。谢谢你的澄清。
  • 我不喜欢这本书。指示不是很清楚。让我用一天半的时间解析 Java 文档。

标签: java file oop object io


【解决方案1】:

好吧,首先是Java中没有名为“java.util.io”的库。您可能正在寻找的是"java.io"

关于您的代码的另一件事是您拼错了 Scanner 对象名称,不确定这是否是您发布问题时的意外,但正确的语法是:

Scanner inFS = null;

关于您收到的原因:

java.util.Scanner[delimiters=\p{javaWhitespace}+][position=77][match 有效=假][需要输入=假][来源 关闭=true][跳过=false][组分隔符=\,][十进制 分隔符=.][正前缀=][负前缀=\Q-\E][正 后缀=][负后缀=][NaN字符串=\QNaN\E][无穷大字符串=\Q∞\E]

这是因为您将 Scanner 对象传递给 PrintWriter。您实际上并没有打印 Scanner 读取的行,而是打印从其 toString() 方法返回的 Scanner 的字符串内容。

无论如何,为了将文本放入输出中,您需要一个指向输出文件的 File 对象和一个指向输出文件的 File 对象的 PrintWriter。使其工作的总体思路是让您的 PrintWriter 对象写入 OutputFile.txt,同时程序通过 Scanner 从 InputFile.txt 读取行。因此,您的代码应如下所示:

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

public class Main 
{
    public static void main(String[] args) throws IOException 
    {
        File inputFile = new File("InputFile.txt");
        File outputFile = new File("OutputFile.txt");
        Scanner inFS = new Scanner(inputFile);
        PrintWriter outFS = new PrintWriter(outputFile);

        String line;
        while (inFS.hasNextLine()) 
        {   
            // Read in the line and convert it to upper case
            line = inFS.nextLine().toUpperCase();

            // Print the result to the console
            System.out.println(line);

            // Write the read in line to the output file with a new line character
            outFS.print(line + "\n");
        }

        // Close any resources used
        outFS.close();
        inFS.close();
    }
}

【讨论】:

  • 谢谢达里安。我真的应该检查一下我的语法。您非常正确地向我解释了这一点,并且使我易于理解。除了我的代码很丑之外,我看到了你在说什么。我至少是在正确的轨道上还是完全偏离了轨道?
  • 你实际上是在正确的轨道上。尽管有轻微的拼写错误/错误的库名称,但您仍然了解完成此操作所需的库/对象。从技术上讲,您可以使用 FileInputStream/FileOutputSteam 而不是 File,但是,这些输入/输出流更多地用于写入/读取原始字节流,例如图像数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-22
  • 2023-03-27
  • 1970-01-01
  • 2014-06-17
  • 2016-05-10
  • 2023-03-11
  • 2017-02-10
相关资源
最近更新 更多