Java에서 원격 경로에서 파일을 문자열로 읽습니다. 로컬 지점과 원격 지점이 동일한 네트워크에 있습니다. 로컬 포인트는 Windows, 원격 포인트는 Linux입니다. 는 로컬 경로에서 파일을 읽으려면 내가 사용Java : 원격 경로에서 파일 읽기
filecontent = new Scanner(new File(...local path...)).useDelimiter("\\Z").next();
대신, 원격 경로 내가 예를 들어, 작동하지 않는 이상 해결책을 발견
- 파일 (.. 원격 경로 ..) "\\ 원격 호스트 \ 원격 디렉터리 \ .. \ test.txt"
- 파일 (새 URI ("file : ///..remote path ..")));
- 드라이브 Z에 장착 경로 : 새 파일 ("z : \ test.txt");
나는 다른 방법이없는 경우 내가 사용하는 것 JCIFS 삼바 라이브러리 같은 다른 하나의 해결책을 발견했다. 먼저 새 파일 (..)만을 사용하는 다른 방법이 있는지 묻습니다.
감사합니다.
UPDATE 1 :
내 오라클 DB에서 원격 경로를 얻을. 이제 내 테이블에 "z : \ test.xml"이 있습니다. 사용 새 파일 ("z : \ test.xml"); 스택 트레이스는 :
Java.io.FileNotFoundException: z:\test.xml (Impossibile trovare il percorso specificato)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at java.util.Scanner.<init>(Unknown Source)
at it.latraccia.aruba.client.ClientFatturaElettronicaAruba.runClientFatturaElettronicaAruba(ClientFatturaElettronicaAruba.java:106)
at it.traccia.tracciaHub.TracciaHub.doGet(TracciaHub.java:82)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:474)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:783)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:798)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1434)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
라인 ClientFatturaElettronicaAruba.runClientFatturaElettronicaAruba (ClientFatturaElettronicaAruba.java:106 106 :
filebase64 = new Scanner(new File(responsegetparaminviafattura.getFilePath())).useDelimiter("\\Z").next();
UPDATE 2 : , 최소 완벽한하고 검증 예
내 웹 응용 프로그램이 Java 1.8이 설치된 Tomcat 8.0에서 실행
(방법 "의 doGet"참조)
public class Test extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Test() {
super();
// TODO Auto-generated constructor stub
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
try {
File f = new File("z:\\test.xml");
if(f.exists()) {
request.setAttribute("ret",f.toString());
}
else {
request.setAttribute("ret","file not exist");
}
visualizzaJsp(request,response,"/index.jsp");
} catch (IOException e) {
request.setAttribute("ret","IOException");
e.printStackTrace();
} catch (ServletException e) {
request.setAttribute("ret","ServletException");
e.printStackTrace();
}
}
public void visualizzaJsp (HttpServletRequest request, HttpServletResponse response,String pathDispatcher)throws IOException, ServletException{
RequestDispatcher dispatcher =this.getServletContext().getRequestDispatcher(pathDispatcher);
dispatcher.forward(request, response);
}
}
내 index.jsp에서의 출력은 "파일 존재하지"입니다.
그런 다음 몇 가지 실험을 수행 할 것입니다. 즉, 서버에 직접 로그인하여 드라이브를 확인할 수 있습니다. 또는 : 파일 시스템을 쿼리하고 가능한 많은 디버그 데이터를 해당 응답에 넣는 Java 테스트 코드 작성. 단지 호기심을 키우고 이론을 체계적으로 테스트하기 시작하십시오. 다른 사람들이 필요하지 않습니다 :-) – GhostCat
죄송하지만 너무 간단하지는 않습니다. 반대쪽에는 더 많은 노드가있는 클러스터가 있습니다. 나는 그것이 톰캣과 클러스터 간의 핸드 쉐이크 문제 일 수 있다고 생각한다. – wikimt
음. 하지만 결국 자바 코드는 * one * 노드에서 실행중인 * one * jvm에서 정확하게 실행됩니다. 그리고 거기 * * 로컬 * 파일 시스템에 액세스하려고합니다. 그리고 그 작업이 왜 실패하고 있는지 명확하게 이해할 때까지는 "더 복잡한"을 추가하는 것이 합리적이지 않습니다. – GhostCat