如何在字符串中引用扫描程序时关闭Java扫描程序?

时间:2013-12-05 21:52:35

标签: java java.util.scanner

我目前有一台扫描仪扫描文件的全部内容,并将读取的数据打印到文本区域,有点像打开的功能。我的问题是我使用的方法(以及我所知道的唯一一个)需要创建一个文件然后删除,但是由于进程正在使用该文件而无法删除扫描仪,我不知道如何关闭扫描仪,因为它已在字符串中定义。它可能是一个简单的解决方案,但它一直在躲避我。先感谢您。这是我的代码:

int returnVal = fc.showDialog(this,
                                  "Open");

    if (returnVal == JFileChooser.APPROVE_OPTION) {
        File file = fc.getSelectedFile();
        String fullPath = file.getAbsolutePath();

        try {
            new FileEncryptor("DES/ECB/PKCS5Padding",fullPath).decrypt();


                String content = new Scanner(new File(fullPath + ".dec")).useDelimiter("\\Z").next();

                jTextArea1.setText(content);

                //close scanner here to delete file

                File n = new File(fullPath + ".dec");
                System.out.println(n);
                n.delete();

        } catch (Exception e) {

            e.printStackTrace();
        }   


    } else {

    }

    //Reset the file chooser for the next time it's shown.
    fc.setSelectedFile(null);
}                                         

3 个答案:

答案 0 :(得分:1)

将其分成更多行。

Scanner scanner = new Scanner(new File(fullPath + ".dec"));
String content = null;
try {
   content = scanner.useDelimiter("\\Z").next();
} finally {
   scanner.close();
}

答案 1 :(得分:0)

您无法在String中引用对象,尤其是Scanner。

String是您想要的数据的副本,因此关闭Scanner不会改变不可变的字符串(不可更改)

您要做的是抓住扫描仪,以便关闭它。

Scanner scanner = new Scanner(new File(fullPath + ".dec")).useDelimiter("\\Z");
String content = scanner.nextLine();

scanner.close();

答案 2 :(得分:0)

您丢失了扫描仪的手柄。

尝试类似:

            Scanner contentScanner = new Scanner(new File(fullPath + ".dec"));
            String content = contentScanner.useDelimiter("\\Z").next();
            contentScanner.close();