В Java я хотел бы прочитать файл с удаленного пути в строку. Локальная точка и удаленная точка находятся в одной сети. Локальная точка - это Windows, удаленная точка - Linux. Для чтения файла с локального пути я использую:Java: чтение файла с удаленного пути
filecontent = new Scanner(new File(...local path...)).useDelimiter("\\Z").next();
Вместо удаленного пути я нашел несколько решений, которые не работают, например:
- File (.. дистанционный путь ..) как «\\ удаленный хост \ удаленный каталог \ .. \ test.txt"
- Файл (новый URI ("file: ///..remote path .."));
- Путь установки в привод Z: и читать как новый файл ("z: \ test.txt");
я нашел еще одно решение, как библиотеки JCIFS Samba, что я буду использовать, если нет других способов. Во-первых, я хотел бы спросить вас, есть ли другой способ использовать только новый файл (..).
Благодарим за внимание.
UPDATE 1:
Я получаю удаленный путь от моей БД Oracle. Теперь в моем столе есть «z: \ test.xml». Использование новый файл ("z: \ test.xml"); StackTrace является:
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)
линии 106 ClientFatturaElettronicaAruba.runClientFatturaElettronicaAruba (ClientFatturaElettronicaAruba.java:106:
filebase64 = new Scanner(new File(responsegetparaminviafattura.getFilePath())).useDelimiter("\\Z").next();
ОБНОВЛЕНИЕ 2: минимальная, полный и Проверяемость пример
Мое веб-приложение работает под Tomcat 8.0 с Java 1.8
(см метод "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 * jvm, работающем на * одном * узле. И * там * он пытается получить доступ к * локальной * файловой системе. И не имеет смысла добавлять «большую сложность», пока не будет понятно, почему эта операция терпит неудачу. – GhostCat