Java共享对象

时间:2016-08-22 22:27:12

标签: java object

我开始学习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

3 个答案:

答案 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终端更改为无限缓冲,现在它完全正确显示。

感谢您提供命名和帮助我编写代码的指示。 我是个笨蛋。