Serveur Tomcat absolu d'accès au fichier dans la guerre webapp

J'ai un Printemps webapp dont .war fichier a été uploadé sur un serveur Tomcat. La plupart des fonctions de base fonctionnent comme prévu, pages vues et la soumission d'un formulaire.

Mon problème maintenant c'est que ma webapp besoin de lire et d'écrire des fichiers et je suis désemparés quant à la façon dont je peux le faire (le fichier I/O retours java.lang.NullPointerException).

J'ai utilisé le suivant le code pour obtenir le chemin absolu d'un fichier donné suggéré par Titi Wangsa Bin Damhore à connaître le chemin d'accès relatif au serveur:

HttpSession session = request.getSession();
ServletContext sc = session.getServletContext();
String file = sc.getRealPath("src/test.arff");
logger.info("File path: " + file);

Ici est le chemin de sortie:

/home/username/tomcat/webapps/appname/src/test.arff

Mais quand j'ai vérifié le fichier de répertoire via WinSCP, le réel du fichier chemin d'accès est:

/home/username/tomcat/webapps/appname/WEB-INF/classes/test.arff

Voici mes questions:

  1. Comment puis-je transformer ces chemins d'accès dans quelque chose comme C:/Users/Workspace/appname/src/test.arff (le chemin original dans mon local de la machine qui fonctionne parfaitement)? C'est les serveurs sont Apache Tomcat 6.0.35 et Apache Tomcat 6.0.35.
  2. Pourquoi le code de retour d'un chemin d'accès différent, par opposition au chemin d'accès?
  3. Si le fichier I/O n'est pas applicable, quelles alternatives peut-on utiliser?

PS j'ai juste besoin de deux fichiers (< 1 MO chacun) donc je ne pense pas que j'ai peut-être besoin d'utiliser une base de données pour les contenir, comme suggéré par moins dans ce fil.

Fichier I/O

Ci-dessous le code que j'utilise pour accéder au fichier dont j'ai besoin.

BufferedWriter writer;
    try {
        URI uri = new URI("/test.arff");
        writer = new BufferedWriter(new FileWriter(
            calcModelService.getAbsolutePath() + uri));

        writer.write(data.toString());
        writer.flush();
        writer.close();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (URISyntaxException e) {
        e.printStackTrace();
    }

OriginalL'auteur | 2013-12-05