Java 为什么不是';这不是写给我所在地区的信吗

Java 为什么不是';这不是写给我所在地区的信吗,java,jtextarea,Java,Jtextarea,所以我尝试将一个文件读入fileinputstream,然后逐字节读取,将其转换为十六进制,并在JText区域输出。if=15在这一点上并不重要,这只是演示何时使用新的行,但我还没有实现它。然而,无论出于什么原因,当我附加JTextarea时,它都不会写入JTextarea try { FileInputStream in = new FileInputStream(file); FileOutputStream out = new FileOut

所以我尝试将一个文件读入fileinputstream,然后逐字节读取,将其转换为十六进制,并在JText区域输出。if=15在这一点上并不重要,这只是演示何时使用新的行,但我还没有实现它。然而,无论出于什么原因,当我附加JTextarea时,它都不会写入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();


        }
试试看{
FileInputStream in=新的FileInputStream(文件);
FileOutputStream out=新的FileOutputStream(文件);
bin=新整数[23123];
字符串[]hexChars=新字符串[bin.length*2];
int hexcount=0;
布尔完成=假;
而(!完成)
{
int next=in.read();
如果(下一个==-1)
{
完成=正确;
}
其他的
{hexChars[hexcount]=Integer.toHexString(下一个);
如果(hexcount==15)
{
对于(int i=0;i<16;i++){
textArea.append(hexChars[i]);
}
hexcount=0;
}否则
{
hexcount++;
}
计数++;
}
}
filelbl.setText(“打开:“+file.getName()+”);
in.close();
out.close();
}

可能只有我一个人,但是,这些

FileOutputStream out = new FileOutputStream(file);
bin = new int[23123123];
String[] hexChars = new String[bin.length * 2];
我觉得很奇怪。我不知道你为什么要打开一个
输出流
到一个
文件
,而你刚刚打开了一个
输入流
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
值,并将其附加到
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();
        }
    }

}

它没有出现在
JTextArea
中的原因可能有很多,您可能忘记将其添加到任何可见窗口,或者您可能正在隐藏变量…

您是否尝试过调试?为什么要打开正在读取的同一文件的输出流?这可能会损坏您的文件…我看到的一件事是
尝试{bin=new int[23123123];String[]hexChars=new String[bin.length*2]
。catch块在哪里?这是在堆上分配200MB+,默认情况下,堆大小通常小于此值。它可能会抛出OfMemoryError。您是否在EDT中调用它?嗯……我尝试实现更改,并添加一段静态文本,以确保文本完全加载到jtextarea上。但utput还没有出现。所以我不确定交易是什么。我将不得不胡思乱想,试图弄清楚它,除非你能提供一个全面的可运行的例子来说明你的问题,这是我们能给你的,好吧,这是我的类,然后只是一个runner主类,将其设置为可见。编辑:该死的,我很笨。所以我只是用一个docx文件试了一下,它把东西发回了。所以它不喜欢.txt