扫描仪无法从文件中读取

时间:2014-05-29 12:05:51

标签: java java.util.scanner

我正在编写程序,它将被读取文件,由用户选择。我有代码:

public class program extends javax.swing.JFrame {

private String textEncode;
...

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    JFileChooser fch = new JFileChooser();
    int choose = fch.showOpenDialog(this);
    if(choose == JFileChooser.APPROVE_OPTION) {
        String help = fch.getSelectedFile().getPath();
        jTextField2.setText(help);
        try {
            Scanner in = new Scanner(new File(help));
            while(in.hasNextLine()) {
            textEncode = in.nextLine();
            }
        } catch (FileNotFoundException ex) {
            JOptionPane.showMessageDialog(this, "Nie znaleziono pliku", "Błąd wczytywania", JOptionPane.ERROR_MESSAGE);
        }
    }
    jTextArea1.setText(textEncode);
    System.out.println(textEncode);
}

我的文件有1行文字。当程序结束读取文件时,变量textEncode的值为“null”。哪里有问题? 我尝试使用in.next()in.hasNext(),但它也不起作用。

2 个答案:

答案 0 :(得分:0)

我找到了解决方案:

public class program extends javax.swing.JFrame {

private String textEncode;
...

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    JFileChooser fch = new JFileChooser();
    int choose = fch.showOpenDialog(this);
    if(choose == JFileChooser.APPROVE_OPTION) {
        String help = fch.getSelectedFile().getPath();
        jTextField2.setText(help);
        try {
            BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(help), "UTF-8"));
            String line;
            String readed = "";
            while((line = in.readLine()) != null) {
                readed = readed + line + "\n";
            }
            jTextArea1.setText(readed);
        } catch (FileNotFoundException ex) {
            JOptionPane.showMessageDialog(this, "Nie znaleziono pliku", "Błąd wczytywania", JOptionPane.ERROR_MESSAGE);
        } catch (UnsupportedEncodingException ex) {
            Logger.getLogger(aes.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(aes.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

但是现在我有显示jTextArea1的问题。加载文件后,textArea会调整大小,如下所示:application window TextArea被添加到jScrollPane。

答案 1 :(得分:0)

我遇到了同样的问题,我花了一段时间才弄明白。

我的问题是我的文件包含法语特殊字符,如“é”。 这导致扫描程序为scanner.nextLine()返回“null”而不会导致任何异常,无论文件有多长,无论特殊字符放在何处。

要解决这个问题,我刚删除了所有特殊字符。如果有人有解决方案让Scanner读取特殊字符,欢迎在下面发表评论。