2013-12-05 8 views
1

В настоящее время у меня есть сканер, который сканирует все содержимое файла и печатает данные, которые читаются в текстовой области, вроде функции открытия. Моя проблема в том, что метод, который я использовал (а также единственный, который я знаю), требует создания файла и последующего его удаления, однако этот файл, который был создан, не может быть удален, поскольку он используется процессом сканера, и я не знаю, как закрыть сканер, как он был определен в строке. Это, вероятно, простое решение, но оно ускользало от меня в течение некоторого времени. Заранее спасибо. Вот мой код:Как закрыть сканер Java, когда сканер ссылается на строку?

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); 
}           
+0

Что вы имеете в виду «оно было определено в строке»? Просто назовите 'content.close()'. Это не повлияет на данные, которые вы уже прочитали. –

+1

Вам не нужно закрывать сканер, поскольку нет экземпляра сканера. –

ответ

1

Разбить его на несколько строк.

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

Спасибо! Отличный ответ и хорошо объясняется примерами. – DIOS

0

Вы не можете ссылаться на объект в String, особенно на сканер.

Строка представляет собой копию данных, которые вы хотите так закрытие сканера не изменят строку, которая является неизменяемой (неизменным)

То, что вы хотите сделать, это держать на сканер, так что вы можете закрыть его.

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

scanner.close(); 
+0

Спасибо, ваши комментарии и объяснения были как информативными, так и действительными, однако я не могу закончить сканер новой строкой, но использовал информацию, которую вы предоставили, чтобы найти что-то, что работает. – DIOS

0

Вы теряете ручку сканера.

Попробуйте что-то вроде:

  Scanner contentScanner = new Scanner(new File(fullPath + ".dec")); 
      String content = contentScanner.useDelimiter("\\Z").next(); 
      contentScanner.close(); 
Смежные вопросы