2014-03-18 21 views
2

특정 서버 (Windows 2012 서버 R2)에서 임시 파일을 만드는 데 문제가 있습니다. 시도 할 때마다 다음 오류가 발생합니다. 내가 java.io.IOException : 시스템에서 지정된 경로를 찾을 수 없습니다.

  1. 가 즉석에서 java.io.tmpdir을 변수를 변경 시도

    InputStream inputStream = portalBean.createPDF(sessionID, foCode);

    것들 :

    java.io.IOException: The system cannot find the path specified 
    at java.io.WinNTFileSystem.createFileExclusively(Native Method) 
    at java.io.File.createTempFile(Unknown Source) 
    etc.. 
    

    오류는 다음과 같은 코드가 실행 된 것입니다 때마다 발생합니다. System.setProperty("java.io.tmpdir", "C:\\");

  2. 웹 네트워크 lax 파일에 제한되지 않은 위치에 -Djava.io.tmpdir=c:\\temp을 추가했습니다.

  3. 임시 파일에 대한 권한을 가진 지정된 사용자로 실행되도록 webNetwork 서비스를 설정해 보았습니다. 관리자.

  4. 디스크 여유 공간이 있는지 확인하고 c : \ windows \ temp 폴더를 지 웠습니다.

  5. tmp 환경 변수가 기본값으로 설정되었는지 확인하십시오.

  6. 또한 Run As Administrator 옵션으로 열린 명령 프롬프트에서 서비스를 실행 해 보았습니다.

그리고 여전히 IOException이 여전히 남아있다. 동일한 코드를 문제없이 실행하는 다른 서버가 있습니다 (Windows Server 2012).

다른 사람이이 문제를 해결하기 위해 시도 할 수있는 다른 아이디어가 있습니까? 그리고 어떤 일이 벌어지고 있는지 파악하기 위해 문제를보다 철저하게 디버깅 할 수있는 방법에 대한 조언을 구하십시오.

+0

Java 6 또는 Java 7입니까? – fge

+0

@fge Java 7 저는 믿습니다. – Trevor

+0

2012 서버에서 어떤 폴더에 tmp 파일이 있습니까? – AndreaTaroni86

답변

1

시험 후 홈 디렉토리 아래 어딘가에 대신에 디렉토리를 생성 :

final Path tmpdir = Paths.get(System.getProperty("user.home"), "tmp"); 
Files.createDirectories(tmpdir); 
System.setProperty("java.io.tmpdir", tmpdir.toAbsolutePath().toString()); 

그런 다음 거기에 Files.createTempFile()을 시도합니다.

Files.createDirectories()이 디렉토리가 아닌 기존 파일을 참조하면 FileAlreadyExistsException이 표시됩니다.

3

디버깅에 사용할 수있는 도구는 시스템 내부 도구 키트에서 process monitor입니다. 단계는 : 오류가 발생한 후 프로세스 모니터링 로그의 파일 활동을 거치며 프로세스가 파일을 찾는 방법을 찾을 수 있도록 프로세스를 모니터하는 필터 추가 (필자는 javaw.exe라고 생각) 그리고 프로세스가 검색 한 디렉토리. 프로세스가 잘못된 디렉토리에서 검색중인 경우 로그에서 찾을 수 있습니다.

방금 ​​JVM 충돌 문제를 파악하기 위해이 도구를 사용했습니다.

문제의 설명에 따라 프로세스의 경로 변수가 다른 도구와 함께 코드 중간에서 변경된 것 같습니다. process explore 프로세스의 경로 변수를 볼 수 있으므로 도움이됩니다.

관련 문제