문제

Windows 탐색기를 통해 찾아보고 쓸 수 있도록 내 컴퓨터에 디렉터리가 매핑되어 있습니다.Java를 통해 파일을 작성하고 싶습니다.

File f = new File("http://dev1:8080/data/xml/myTestFile123.xml");

f.createNewFile();

다음 오류가 발생합니다.

Exception in thread "main" java.io.IOException: The filename, directory name, or volume label syntax is incorrect
    at java.io.WinNTFileSystem.createFileExclusively(Native Method)
    at java.io.File.createNewFile(Unknown Source)
    at MainTest.createTestFile(MainTest.java:156)
    at MainTest.main(MainTest.java:72)

앞에 http://가 있는 매핑된 디렉터리에 파일을 쓸 수 있는 방법이 있습니까?그것이 바로 디렉토리가 나에게 제공되는 방식이기 때문입니다.Oracle 데이터베이스가 생성하는 가상 디렉터리입니다.

도움이 되었습니까?

해결책

내가 이해하는 바는 당신이 다음 사이트에 글을 쓰려고 한다는 것입니다. Oracle XML DB 저장소.Oracle XML DB Repository는 XML 저장을 위해 Oracle9i Database Release 2에 도입된 기능으로, FTP 또는 HTTP/WebDAV를 통해 액세스할 수 있습니다.귀하의 경우에는 HTTP/WebDAV를 사용하려는 것 같습니다.

에서 설명했듯이 수요일DAV Wikipedia 페이지:

Weddav는 HTTP 위에있는 일련의 확장 세트로, 사용자는 원격 월드 와이드 웹 서버에서 파일을 공동으로 편집하고 관리 할 수 ​​있습니다.

즉, WebDAV 저장소에서 파일 추가, 삭제, 이름 바꾸기 등은 HTTP 단어를 사용하여 수행됩니다.PUT, DELETE, MOVE 등(참조 RFC 4918 상세 사항은).

결과적으로 WebDAV 서버와의 상호 작용은 다음 클래스를 사용하여 수행할 수 있습니다. java.net.

또는 다음과 같은 더 높은 수준의 API를 사용할 수 있습니다. 자카르타 커먼즈 HttpClient.

또는 다음에서 제공하는 것과 같은 Java WebDAV 클라이언트를 사용할 수 있습니다. 미끄러지 다 프로젝트.이것 기사 방법을 보여 주며 간단해 보입니다.그러나 이제 Slide 프로젝트가 종료되었으므로 권장하지 않습니다.

운 좋게도 (아니면), 아파치 잭래빗 프로젝트는 Slide의 대안입니다...그러나 AFAIK Jackrabbit의 WebDAV 지원은 클라이언트보다 서버 측 구현에 더 중점을 둡니다.어쨌든 다음에서 몇 가지 코드 샘플을 찾을 수 있습니다. 이 스레드 jackrabbit-users 메일링 리스트에 있습니다.

나는 HttpClient를 선택하고 지도 시간 아니면 그 샘플 코드 출발점으로.

다른 팁

나는 내가 여기서 무슨 말을하는지 확실하지 않지만 (Java Guy가 아님) "매핑"할 수는 있지만 예상 파일 시스템 경로 대신 URL을 통과 할 수 있습니다. (예 : Windows 아래에 매핑 된 드라이브가있는 경우, 지정된 드라이브 문자를 사용하십시오.

프로토콜로 위치 URI를 통과하려고합니다. 위치 SANS 프로토콜을 통과해야합니다.

dev1 data xml mytestfile123.xml

매핑 된 드라이브 문자를 사용하려고하는 대신 (매우 약한 것 같습니다) JCIFS:

JCIFS는 CIFS/SMB 네트워킹 프로토콜을 100% Java로 구현하는 오픈 소스 클라이언트 라이브러리입니다. CIFS는 Microsoft Windows 플랫폼 (예 : MAP 네트워크 드라이브 ...)의 표준 파일 공유 프로토콜입니다. 이 클라이언트는 큰 인트라 넷에서 생산에 광범위하게 사용됩니다.

이 코드는 방법을 보여줍니다 원격 시스템에 로그온하고 JCIFS를 사용하여 파일을 쓰십시오. (Muneeb Ahmad에 대한 크레딧) :

import jcifs.smb.NtlmPasswordAuthentication;
import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileOutputStream;

public class Logon {
    public static void main( String argv[] ) throws Exception {
        String user = "user:password";
        NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(user);
        String path = "smb://my_machine_name/D/MyDev/test.txt";
        SmbFile sFile = new SmbFile(path, auth);
        SmbFileOutputStream sfos = new SmbFileOutputStream(sFile);
        sfos.write("Muneeb Ahmad".getBytes());
        System.out.println("Done");
    }
}

편집하다: 원래 질문에 추가 된 의견에 언급 된 바와 같이, 내 이해는 이제 WebDAV 디렉토리에 편지를 쓰려고한다는 것입니다. 더 명확성을 위해 Webdav 주제를 다른 답변으로 다룰 것입니다.

Windows에서 파일을 어떻게 매핑 했습니까? 파일을 만들기위한 메커니즘이 없기 때문에 HTTP 프로토콜을 사용하지 않는 것으로 생각됩니다. 따라서 "HTTP"를 프로토콜로 사용하는 곳은 어디에도 가지 않습니다.

매핑 된 드라이브 문자를 찾으십시오. 아마도 더 많은 것을 원할 것입니다.

File f = new File("F:\\dir\\file.ext");

삼바를 사용하고 있다면 살펴보고 싶을 수도 있습니다. JCIFS 그런 다음 사용할 수 있습니다.

smb://server/share/

로컬 경로를 사용하십시오

당신이 볼 수 있다면 myTestFile123.xml Windows Explorer에서 마우스 오른쪽 버튼을 클릭하고 복사하십시오. Location: 재산 가치. 그런 다음 이것을 새 파일 () 인수로 정확하게 사용하지만 백 슬래시를 두 배로 올리거나 전진 슬래시로 변경하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top