从文件加载数字而不是单词

问题描述 投票:0回答:4
package jtextareatest;

import java.io.FileInputStream;
import java.io.IOException;
import javax.swing.*;

public class Jtextareatest {
    public static void main(String[] args) throws IOException {
        FileInputStream in = new FileInputStream("test.txt");
        
        JFrame frame = new JFrame("WHAT??");
        frame.setSize(640, 480);
        JTextArea textarea = new JTextArea();
        frame.add(textarea);
        
        int c;
        while ((c = in.read()) != -1) {
            textarea.setText(textarea.getText() + Integer.toString(c));
        }
        
        frame.setVisible(true);
        in.close();
    }
}

运行时,它不会放置文件中的正确单词,而是放置与单词无关的随机数。我该如何解决这个问题?

java swing file io
4个回答
8
投票

您可能正在以二进制模式读取文本文件 (

"test.txt"
)(使用
FileInputStream.get
)。

我建议您使用一些

Reader
Scanner

例如尝试以下操作:

Scanner scanner = new Scanner(new File("test.txt"));
while (scanner.hasNextInt())
    textarea.setText(textarea.getText() + scanner.nextInt());

顺便说一句,您可能想使用

StringBuilder
构建字符串并最后执行
textarea.setText(stringbuilder.toString())


1
投票

使用JTextComponent API提供的read()方法:

FileReader reader = new FileReader( "test.txt" );
BufferedReader br = new BufferedReader(reader);
textArea.read( br, null );
br.close();

0
投票

http://download.oracle.com/javase/6/docs/api/java/io/FileInputStream.html#read%28%29

从此输入流中读取 byte 数据。

返回类型是 int,而不是 char 之类的。

所以就按照 aioobe 说的去做吧。


0
投票

未经测试,但您应该也能够将字节(整数)转换为字符:

int c;
while ((c = in.read()) != -1)
{
    textarea.setText(textarea.getText() + Character.toString((char)c));
}

但是,aioobe 的答案可能更好。

© www.soinside.com 2019 - 2024. All rights reserved.