을 닫은 후 파일을 삭제할 수 없습니다, 나는 AudioInputStream를 만들 : 나는 참조 된 파일을 삭제하려고하면, 내가 말하는 FileSystemException 오류가 발생, 그러나도 내 코드의 한 지점에서 그래서 AudioInputStream를
try{
File f = new File(main.getWavFileName(0, tab));
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(f);
audioInputStream.close();
audioInputStream = null;
f = null;
}catch(Exception e) {e.printStackTrace();}
을 그 파일 다른 프로세스에서 사용 중입니다. 위의 코드를 주석 처리 할 때 더 이상 오류가 발생하지 않고 파일을 삭제할 수 있습니다. AudioInputStream에 파일의 참조를 강제하지 않게 할 수있는 방법이 있습니까?
편집 : 삭제를 호출하는 코드 - 그러나 위 코드가 삭제를 호출하기 전에 실행되었음을 확인했습니다 (코드가 이전과 이후에 system.out.print를 사용하여 현재 실행 - 모르는 더 나은 방법을)
File f[] = new File(rootPath + File.separator + directoryNames.get(t)).listFiles();
for(File f2 : f)
{
try {
Files.delete(Paths.get(f2.getAbsolutePath()));
} catch (IOException e) {
e.printStackTrace();
}
}
편집 : 그냥 참고로, 난 당신은 아는 최소한의 try 문 안에 있던 코드를 감소하고, 난 여전히 오류가 발생, I 아무 이유없이 스트림을 만들려고하지 않습니다.
편집 : Windows 7을 실행 중이지만 코드를 주석 처리 할 때 파일을 삭제하는 동안 오류가 발생하지 않습니다. 내가 얻을 수는 예외입니다 : 내가 참조 된 파일을 삭제하려고하면
java.nio.file.FileSystemException: C:\Users\Fred\Desktop\test patient\June 24th, 2011\s1.wav: The process cannot access the file because it is being used by another process.
at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:86)
at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102)
at sun.nio.fs.WindowsFileSystemProvider.implDelete(WindowsFileSystemProvider.java:268)
at sun.nio.fs.AbstractFileSystemProvider.delete(AbstractFileSystemProvider.java:103)
at java.nio.file.Files.delete(Files.java:1071)
at main.closeTab(main.java:349)
at MainButtonActionListener.actionPerformed(main.java:436)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
at java.awt.Component.processMouseEvent(Component.java:6504)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6269)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4860)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4686)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2713)
at java.awt.Component.dispatchEvent(Component.java:4686)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
at java.awt.EventQueue.access$000(EventQueue.java:101)
at java.awt.EventQueue$3.run(EventQueue.java:666)
at java.awt.EventQueue$3.run(EventQueue.java:664)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:680)
at java.awt.EventQueue$4.run(EventQueue.java:678)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Windows 7을 사용하고 있습니까? 이 파일은 어디에 있습니까? UAC 관련 문제가 발생할 수 있습니다. 또한 질문에 대한 예외 사항을 게시 할 수 있습니까? –
이 코드를 실행하고 close 메서드가 호출 된 후에 파일을 삭제할 수 있지만 깨끗한 스트림 처리를위한 @ GETah의 대답을 참조하십시오. 또한 실제로 삭제를 호출하는 코드를 게시 할 수 있습니까? 어쩌면 너는 우리가 볼 수없는 경주를 벌일지도 모른다. –
이 게시물을 통해 http://windowsxp.mvps.org/processlock.htm 파일을 잠그는 프로세스를 찾으십시오. 정확한 스택 추적과 예외가 도움이 될 것입니다.또한 try 블록 대신 finally 블록에서 스트림을 닫을 수도 있습니다. – Egalitarian