2017-10-01 2 views
0

Serveur: tomcat.FilenotfoundExcption dans JAVAEE Eclipse

J'ai créé une servlet pour appeler le programme JAVA afin de traiter le fichier CSV.

Le nouveau code ToJSON(). Main (fichiers) traitera les fichiers csv vers json.

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    String [] files = request.getParameter("files").split(","); 
    System.out.println(String.join(",", files)); 
    new ToJSON().main(files); 
    ////call the java program to convert CSV files to json then sent the file name or the contain back. 
    response.getWriter().append("data.json"); 
} 

SEVERE: Servlet.service() for servlet [charting.servlet.ChartingServlet] in context with path [/Charting] threw exception 
java.io.FileNotFoundException: BankFileLine.csv (No such file or directory) 
at java.io.FileInputStream.open0(Native Method) 
at java.io.FileInputStream.open(FileInputStream.java:195) 
at java.io.FileInputStream.<init>(FileInputStream.java:138) 
at java.io.FileInputStream.<init>(FileInputStream.java:93) 
at java.io.FileReader.<init>(FileReader.java:58) 
at format.LoadCSVFile.iterable(LoadCSVFile.java:60) 
at format.LoadCSVFile.getMaxLength(LoadCSVFile.java:44) 
at format.LoadCSVFile.<init>(LoadCSVFile.java:26) 
at toJSON.ToJSON.main(ToJSON.java:26) 

Mais j'ai continué à obtenir filenotfoundexception. J'ai essayé de mettre les fichiers dans WebContent et src. aucun d'eux n'a travaillé. J'ai essayé d'ajouter le chemin: localhost: 8080/ChartingServlet/filename, ne fonctionnait toujours pas.

Voici les répertoires Here is the directories of the project files

Ma question est là où je devrais mettre les fichiers?

+0

Indiquez le chemin absolu vers les fichiers. Vous ne pouvez pas compter sur le répertoire de travail actuel. –

Répondre

-1

Le répertoire en cours d'exécution sur le serveur n'est pas un élément sur lequel vous devriez compter, et rien de ce que vous avez montré n'en tient compte.

1) Si les fichiers csv ne doivent pas être servis au client, vous ne vous préoccupez pas réellement de l'emplacement du fichier, vous vous souciez uniquement de lire le contenu correct. Dans ce cas, vous pouvez les placer sous votre dossier src, puis obtenir un InputStream à leur contenu en utilisant #getResourceAsStream() à partir de votre classe de servlet. Cela fonctionne de la même manière que dans une application Java normale, et ne se casse pas si vous voulez empaqueter votre application Web en tant que fichier WAR.

2) Si le client doit être en mesure de lire le .csv original, vous aurez envie de get the ServletContext from your request object, puis construire votre système de fichiers en utilisant un chemin absolu ServletContext#getRealPath(), en passant dans les chemins relatifs à votre dossier WebContent si vous connaissez l'emplacement absolu de vos fichiers, que vous pouvez ensuite lire comme d'habitude. Cette méthode n'a pas tendance à survivre à l'empaquetage de votre application en tant que fichier WAR. Dans ce cas, pourrait essayer ServletContext#getResourceAsStream(), mais je n'ai pas d'expérience de première main avec cela, donc je ne suis pas sûr que cela fonctionne.

+0

Merci beaucoup, cela a fonctionné, je peux lire le fichier et renvoyé le contenu du fichier. –