문제

나는이 이상한 문제에 직면하고있다.

다른 컴퓨터에있는 파일을 공유 리소스로 읽으려고합니다.

\\remote-machine\dir\MyFileHere.txt

독립형 애플리케이션 (16 줄 Java 파일)을 실행할 때는 모든 것이 좋습니다. 그러나 서버 "엔진"에서 동일한 클래스와 동일한 방법을 사용하여 동일한 파일을 읽으려고 할 때 (이것은 Java 프로그램을 실행할 수있는 Java EE 애플리케이션 서버와 거의 비슷한 응용 프로그램 엔진입니다) "FilenotFoundException"입니다. 던져졌다.

나는 일종의 권한이 될 것이지만, 자원을 드라이브로 매핑합니다 : k : .

내 Java 파일을 다시 실행하고, 읽기, 괜찮습니다.

"엔진" -> filenotfoundException 내에서 내 Java 파일을 다시 실행하십시오.

파일을 로컬 컴퓨터에 복사하면 (C : MyFileHere.txt) 예외는 없습니다.

의문

이 filenotfoundexcecption의 원인은 무엇입니까?

Java 1.5를 사용하고 있습니다

내가 아는 한 엔진은 거의 Java를 투명하게 사용합니다.

누구든지 비슷한 것에 직면 한 사람이 있습니까?

추가 질문? 해결 방법에 대한 좋은 접근법은 무엇입니까? 나는 해당 파일을 제공하는 Tomcat 설치에 대해 생각하고 HTTP를 통해 읽기 시작했지만 너무 많다고 생각합니다. 그래서 SMB 프로토콜이 처음에는 그렇지 않습니까? 그리고 아마도 나는 어쨌든 소켓을 열 수 없을 것입니다.

보안 관리자가 원인 일 수 있습니다 (이전에 사용한 적이 없지만 그것이 존재한다는 것을 알고 있습니다).

그럴 경우 보안 예고가 발생하지 않습니까?

정말 감사합니다.

편집하다

해결되었습니다. 감사합니다 Steve W.

이 엔진은 Zerog의 "Launchanywhere"로 출시 된 것으로 나타났습니다. 따라서 .exe가 생성되어 지정된 앱으로 JVM을 실행할 것입니다.

이 응용 프로그램 자체는 런처입니다. 엔진을 시작하면 JVM 프로세스를 소유 한 사용자는 시스템입니다. Steve가 지적 했듯이이 사용자는 네트워크 액세스 권한이 없으므로 공유 리소스 또는 매핑 된 드라이브에서 읽을 수 없습니다.

해결 방법 (제조업체에 이것을보고하는 동안)은 엔진을 수동으로 lauch에 .cmd 파일을 작성하는 것입니다. 수동으로 시작되므로 사용자는 네트워크에 액세스 할 수 있습니다.

Sysinternals의 "Process Explorer"를 사용하여 엔진 앱을 실행하는 데 사용되는 명령 줄을 정확히 알 수 있습니다.

얼마나 엉망이야!

답변을 게시 한 분들께 감사드립니다.

도움이 되었습니까?

해결책

공유 리소스가 사용자 이름과 비밀번호로 보호됩니까? 그렇다면 응용 프로그램 엔진이 해당 사용자로 실행되고 있습니까? 응용 프로그램 엔진이 Windows 서비스로 실행중인 경우 Windows 서비스는 "로컬 시스템 계정"으로 실행할 수 없습니다. 이 계정은 네트워크에 액세스 할 수 없습니다. 공유 드라이브에 액세스 할 권한이있는 사용자로서 실행되도록 서비스를 구성해야합니다.

다른 팁

파일을 실제로 "myfilehere.txt"라고 불리는 파일이 실제로 "myfilehere.txt.txt"라고 불리는 것을 두 번 확인하십시오.

서버의 이벤트 로그를 확인하여 거부 중인지 확인 했습니까? 프로그램이 생각과 다른 사용자 계정으로 실행 중일 수 있습니다.

저는 Java에 익숙하지 않지만 네트워크 서비스가 리소스에 액세스 할 수 있도록 작성해야했던 일부 프로그램을 알고 있습니다.

사실 나는 당신이 이제 올바른 답을 똑딱 거리는 것을 알았습니다. 오 그리고 그것은 내 대답과 동일했다 :) Cool!

한 번도 비슷한 문제가있었습니다. 나는 그것이 Java가 원격 파일을 해결하는 방식과 관련이 있다고 생각합니다. 다음을 시도하고 그것이 작동하는지 확인하십시오.

파일 : ///remote-machine/dir/myfilehere.txt

나는 Folowing 예제를 사용하여 상자에 공유 폴더에 파일의 존재를 확인하고 다음을 수행했습니다.

public static void main(String[] args) throws URISyntaxException{
    URI uri = new URI(args[0]); //args[0] = File:////remote-machine/dir/MyFileHere.txt
    File f = new File(uri);
    System.out.print(String.format("File %1$s Exists? %2$s", args[0],f.exists()));
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top