为什么不写我的JTextArea

时间:2014-03-11 23:21:33

标签: java jtextarea

所以我试图将文件读入fileinputstream,然后逐字节读取,将它们转换为十六进制并在JText区域输出。 if = 15在这一点上并不重要,那只是说明何时到新线但我还没有实现它。但是,无论出于何种原因,当我追加它时,什么都不会写入JTextarea。

try {
            FileInputStream in = new FileInputStream(file);
            FileOutputStream out = new FileOutputStream(file);
           bin = new int[23123123];
           String[] hexChars = new String[bin.length * 2];
           int hexcount = 0;
           boolean done=false;
           while(!done)
           {
               int next = in.read();
                    if(next == -1)
                    {
                        done=true;
                    }
                    else
                    {   hexChars[hexcount] = Integer.toHexString(next);
                        if (hexcount == 15)
                        {
                            for (int i = 0; i < 16; i++) {
                            textArea.append(hexChars[i]);
                            }
                            hexcount = 0;

                        } else
                                {
                                hexcount++;
                                        }
                        count++;

                    }
           }
                  filelbl.setText("Opened: " + file.getName() + "." );
                in.close();
                out.close();


        }

1 个答案:

答案 0 :(得分:2)

这可能只是我,但是,这些......

FileOutputStream out = new FileOutputStream(file);
bin = new int[23123123];
String[] hexChars = new String[bin.length * 2];

我觉得很奇怪。我不知道为什么你要打开一个OutputStreamFile你刚刚打开一个InputStream来...... int缓冲区似乎过大了hexChars永远不需要超过16个字符,更不用说你完全忽略了int缓冲区......

你的try-catch有点尴尬。通常,您应该提供一个finally块,用于关闭您打开的任何资源,例如流,或者您可以使用Java 7中引入的try-with-resource功能...

try (FileInputStream in = new FileInputStream(file)) {...

你的文件阅读过程似乎有点尴尬,例如,以下看起来显得过于​​复杂......

while (!done) {
    int next = in.read();
    if (next == -1) {

可以简化为......

int next = -1;
while ((next = in.read()) != -1) {...

但这是一个不错的选择;)

您没有在文本区域添加任何新行字符,也没有考虑到在您阅读完文件后hexchars可能包含部分结果的可能性。

由于您是逐个从文件中读取每个int,因此更好的解决方案可能是将每个int转换为hex值并将其附加到{{1 (或者可能是JTextArea,具体取决于您的要求)

例如

StringBuilder

可能有多种原因导致它没有出现在您的import java.awt.BorderLayout; import java.awt.EventQueue; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; public class HexViewer { public static void main(String[] args) { new HexViewer(); } public HexViewer() { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { } JTextArea ta = new JTextArea(10, 16); readFile(new File("a file"), ta); JFrame frame = new JFrame("Testing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new BorderLayout()); frame.add(new JScrollPane(ta)); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } public void readFile(File file, JTextArea textArea) { try (FileInputStream in = new FileInputStream(file)) { int colCount = 0; int next = -1; while ((next = in.read()) != -1) { textArea.append(Integer.toHexString(next) + " "); colCount++; if (colCount > 15) { textArea.append("\n"); colCount = 0; } } } catch (IOException exp) { exp.printStackTrace(); } } } 中,您可能忘记将其添加到任何可见窗口中,或者您可能会隐藏变量......