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のSambaライブラリのような一つの他の解決策を見つけました。まず、新しいファイル(..)だけを使用する別の方法があるかどうか尋ねます。
ありがとうございました。
UPDATE 1:
私はOracleの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:、最小完全、かつ検証例
私のWebアプリケーションは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
申し訳ありませんが、それほど単純ではありません。反対側には、より多くのノードを持つクラスタがあります。私はそれがTomcatとクラスタ間のハンドシェイクの問題になると思います(共有フォルダはもちろんです)。 – wikimt
まあ;しかし、結局あなたのJavaコードは、* one *ノード上で動作する* 1 * jvmで正確に実行されます。そして、*そこに*ローカル*ファイルシステムにアクセスしようとしています。そして、なぜその操作が失敗しているのかをはっきりと理解するまでは、「複雑さを増やす」ことを加えるのはあまり意味がありません。 – GhostCat