0

我是 JAVA 的初学者。这是我在这个论坛上的第一个问题。我正在为一个项目开发一个十六进制编辑器工具。作为其中的一部分,我必须制作一个小应用程序,它应该打开一个文本文件并读取它的内容并将其显示在编辑器区域中。然后它还应该使用 SHA-256 等制图算法为文本文件中的文本生成哈希值。我在互联网上找到了一个非常有用的代码。我正在尝试重用它。我被困在将文本文件的内容显示到编辑器中。代码是这样的。

   public Test() throws IOException {

    // passes the number of array elements to the 
    // editor.

    byte[] ar;
    ar = new byte[16 * 16 * 100];
    Arrays.fill(ar, (byte) 0);


    ByteArrayOutputStream bos=new ByteArrayOutputStream();
    ObjectOutputStream oos=new ObjectOutputStream(bos);


    win = new JFrame("Hex Editor");
    win.setSize(654, 473);

    JButton btnOpenFile = new JButton("Open File");
    btnOpenFile.setBounds(67, 38, 91, 23);
    win.getContentPane().add(btnOpenFile);
    btnOpenFile.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

            Fileopener opener = new Fileopener();
            //returns the string value through getpause() method.
                            System.out.println(opener.getPause());
        }
    });

oos.writeObject("kirandfasnvcxnz.,mvnmc,xznvmcxzmnvcmxzcccbnxz cz hajk vc jbcvj xbnzvc sbj cvxz,bcxjnzbcvjhs avcjz cxmzncvxz ");
ar=bos.toByteArray();       

我为 fileopener 定义了另一个类文件的方法。在执行期间返回文本文件的内容。我的问题是如何将从文本文件中读取的字符串值传递给此方法。以便它显示在编辑器中。

oos.writeObject("kirandfasnvcxnz.,mvnmc,xznvmcxzmnvcmxzcccbnxz cz hajk vc jbcvj xbnzvc sbj cvxz,bcxjnzbcvjhs avcjz cxmzncvxz ");

编辑器正在使用上面的代码行显示内容。我试图通过调用返回读取文本的字符串值的 getter 方法来做到这一点。我用于此的方法是

oos.writeObject("Fileopener.getPause()");

它没有显示文本文件的所需内容。相反,编辑器在编辑器的大括号内显示函数(我猜它已被读取为字符串)。提前感谢您的帮助。@sgmorrison 下面是Fileopener()的代码`

     package hexeditor;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import javax.swing.JFileChooser;

public class Fileopener {

    static String pause;

    /**
     * 
     */
    public Fileopener() {
        super();
        // TODO Auto-generated constructor stub

        JFileChooser chooser = new JFileChooser();
        int returnVal = chooser.showOpenDialog(null);

        StringBuffer contents = new StringBuffer();

        BufferedReader inFile = null;

        if (returnVal == JFileChooser.APPROVE_OPTION) {

            File f = chooser.getSelectedFile();

            try {

                inFile = new BufferedReader(new FileReader(f));

                String text = null;

                while ((text = inFile.readLine()) != null) {

                    contents.append(text)

                    .append(System.getProperty(

                    "line.separator"));

                }

            }

            catch (FileNotFoundException e1) {

                e1.printStackTrace();

            } catch (IOException e1) {

                e1.printStackTrace();

            } finally {

                try {

                    if (inFile != null) {

                        inFile.close();

                    }

                } catch (IOException e1) {

                    e1.printStackTrace();

                }

            }

            // show file contents here
            pause = contents.toString();
            setPause(pause);
                   }

    }
         public static String getPause() {
        return pause;
    }

    public void setPause(String pause) {
        this.pause = pause;
    }

}

`

4

1 回答 1

0

如果您的代码与编写的 () 完全相同,oos.writeObject("Fileopener.getPause()");那么您将 String 传递给writeObjectwith value "Fileopener.getPause()"。您不是在调用 on 方法fileopener,而是创建一个看起来有点像方法调用的新 String 对象。要查看这种情况,请尝试将行替换为oos.writeObject("Fileopener.getNonExistentMethod()");并查看会发生什么。

要更正此问题,请从您的通话中删除引号:

oos.writeObject( Fileopener.getPause() );

更新看到 Fileopener 的代码后,我现在看到了可能是另一个问题。Fileopener 的 pause 字段声明为static,这意味着该属性的相同值可用于该类的所有实例,也可用作该类本身的属性。getPause也被声明为静态的,因此适用相同的规则。

在您的评论中,您提到了以下代码:

    Fileopener opener = new Fileopener(); 
    System.out.println(opener.getPause());

创建一个新的 Fileopener 会导致pause设置为包含文件内容。不调用new Fileopener()pause永远不会设置,但您仍然可以使用getPause.

由于只有在读取文件后读取 的值才有意义pause,所以我建议staticpauseand中删除getPause。然后,您必须将麻烦的代码更改为:

    Fileopener opener = new Fileopener(); 
    oos.writeObject(opener.getPause());
于 2012-04-08T20:38:50.343 回答