我开始学习Java了。我很难让我的简单程序工作。 目标是将文本文件添加到字符串值。然后修改字符串。 显示原始文本 然后显示修改后的文本
问题是两个对象都显示修改后的字符串。 我理解如果我说object = object2并且我修改了object2对象的概念,因为我复制了对象的引用。
或者在这种情况下文本文件是否被视为对象?我该如何解决它?
import java.util.Scanner;
import java.io.File;
public class StartUpFile
{
private String fileText;
/**
* Constructor for objects of class StartUpFile
*/
public StartUpFile(String fileName)
{
readFile(fileName);
}
/**
* Loads the text file into the class\object
*/
public void readFile(String fileName)
{
fileText = "";
try
{
Scanner file = new Scanner(new File(fileName));
while (file.hasNextLine())
{
String line = file.nextLine();
fileText += line + "\n";
}
file.close();
}
catch (Exception e)
{
System.out.println(e);
}
}
public String showFileText()
{
return fileText;
}
public void modifyFileText()
{
fileText = fileName.replaceAll("Q", "z");
}
}
public class ModifyStartupFile
{
public static void main(String[] args)
{
StartUpFile startup = new StartUpFile("1.startup");
StartUpFile startupModified = new StartUpFile("1.startup");
System.out.println(startup.showText());
startupModified.modifyFileText();
System.out.println(startupModified.showText());
}
}
文件内容: QQQQQQQQQQQQQQQ
预期产出:
QQQQQQQQQQQQQQQ zzzzzzzzzzzzzzz
答案 0 :(得分:1)
fileName
中的modifyFile
参数不必要且具有误导性。该文件已加载,内容存储在对象上,因此该方法只需修改它:
public void modifyFile() {
fileText = fileText.replaceAll("Q", "z");
}
在您的主要方法中,只需致电
即可startupModified.modifyFile();
答案 1 :(得分:0)
在您的代码中,您正在尝试从新文件创建Scanner对象,并且您提供的文件名是无效的文件名。
此外,您尝试在一个java文件中编写两个类,而不将ModifyStartupFile作为内部类。您可以按照我的示例创建内部类:
package test;
public class Tester {
public test.Tester.Hello getHelloObject() {
return new Hello();
}
private class Hello {
void sayHello() {
System.out.println("hello");
}
}
public static void main(String[] args) {
Tester dude = new Tester();
Hello man = dude.getHelloObject();
man.sayHello();
}
}
输出:
hello
我通过删除类ModifyStartupFile来修复你的代码以进行编译。无法在具有public访问说明符的另一个公共类中创建此类。在我的示例中,访问说明符是私有的。代码仍然抛出FileNotFoundException,因为文件名无效。以下是我修改的最终结果:
import java.util.Scanner;
import java.io.File;
public class StartUpFile {
private String fileText;
/**
* Constructor for objects of class StartUpFile
*/
public StartUpFile(String fileName) {
readFile(fileName);
}
/**
* Loads the text file into the class\object
*/
public void readFile(String fileName) {
fileText = "";
try {
Scanner file = new Scanner(new File(fileName));
while (file.hasNextLine()) {
String line = file.nextLine();
fileText += line + "\n";
}
file.close();
} catch (Exception e) {
System.out.println(e);
}
}
public String showFile() {
return fileText;
}
public void modifyFile(String fileName) {
fileText = fileName.replaceAll("Q", "z");
}
public static void main(String[] args) {
StartUpFile startup = new StartUpFile("1.startup");
StartUpFile startupModified = new StartUpFile("1.startup");
System.out.println(startup.showFile());
startupModified.modifyFile(startupModified.showFile());
System.out.println(startupModified.showFile());
}
}
输出:
java.io.FileNotFoundException: 1.startup (The system cannot find the file specified)
java.io.FileNotFoundException: 1.startup (The system cannot find the file specified)
答案 2 :(得分:0)
我觉得自己像个笨蛋。我用来测试的文件非常大。我的终端只给了我最后一个修改过的字符串值的部分输出。所以我假设它只打印修改后的值。
我将blue-jay终端更改为无限缓冲,现在它完全正确显示。
感谢您提供命名和帮助我编写代码的指示。 我是个笨蛋。