2015-10-06 5 views
0

Я работаю над созданием веб-приложения вокруг автономного приложения JAR. По сути, приложение JAR считывает входной файл, обрабатывает его и генерирует выходной файл.Spring MVC - не удалось получить доступ к файлу с относительным путем, требуемым зависимостью JAR

Входной файл помещается следующим образом, рядом с JAR.

enter image description here

Код для приложения JAR будет показано ниже.

public class FileReadWriteApp { 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 
    try { 

     File inFiles = new File("../inputFiles"); 
     if (!inFiles.exists()) { 
      if (inFiles.mkdirs()) { 
       System.out.println("Input directory is created!"); 
      } else { 
       System.out.println("Failed to create input directory!"); 
      } 
     } 
     Path inputPath = FileSystems.getDefault().getPath("testInput.txt", new String[0]); 
     Files.copy(inputPath, new FileOutputStream("../inputFiles/testInput.txt")); 

     String content = new String(Files.readAllBytes(inputPath)); 
     String parsedInput = content.toUpperCase(); 

     new File("../outputFiles").mkdirs(); 
     Files.write(Paths.get("../outputFiles/testOutput.txt"), parsedInput.getBytes()); 

    } catch (IOException exc) { 
     System.out.println(exc); 
     System.exit(1); 
    } 
} 

После выполнения JAR в командной строке это успешно создает inputFiles и папку outputFiles на один уровень выше, чем файл JAR и правильно помещает соответствующие входные/выходные файлы.

enter image description here

Однако, когда я добавить файл JAR, как зависимость в весеннем основе веба-приложениях, которые я строй и поместить входной файл и файл JAR в том же месте, он не может получить доступ к файлу ввод ,

В Spring веб-приложения, я поместил как входной файл и файл JAR, как показано ниже:

enter image description here

Я могу даже увидеть их прийти в целевую папку в Lib каталога, как показано ниже:

enter image description here

В моем методе Spring Controller, я выполнение main() метод файла JAR, как это:

String[] args = new String[] { "" }; 
filereadwriteapp.FileReadWriteApp.main(args); 

Однако в консоли я вижу эти сообщения:

Input directory is created! 
java.nio.file.NoSuchFileException: testInput.txt 

Я не могу понять, почему приложение не может найти файл testInput.txt?

Может ли кто-нибудь любезно вести меня относительно исправления этой проблемы?

Есть ли какое-то конкретное место, где я должен разместить файл testInput.txt, чтобы файл JAR зависимости был доступен для него?

Обратите внимание, что я не загружаю ресурс из каталога WEB-INF из веб-приложения. В моем случае у меня возникает проблема с JAR-зависимой JAR-загрузкой ресурса из относительного пути к самому себе.

Любая помощь в этом отношении будет высоко оценена.

+0

Возможный дубликат [Howto загрузить ресурс из WEB-INF каталога веб-архив] (HTTP: //stackoverflow.com/questions/1108434/howto-load-a-resource-from-web-inf-directory-of-a-web-archive) –

+0

@JamesJithin, я не уверен, что это дубликат этого вопроса.Этот другой вопрос связан с загрузкой ресурса из каталога WEB-INF из веб-приложения. В моем случае у меня возникает проблема с JAR-зависимой JAR-загрузкой ресурса из относительного пути к самому себе. – MSR

+0

Вам нужно будет использовать тот же подход в баре зависимости, чтобы прочитать файл. –

ответ

0

Файловые системы апи возвращает другой путь, так что вам нужно использовать путь к классам, чтобы получить файл, как показано ниже

ClassLoader classLoader = getClass().getClassLoader(); 
File file = new File(classLoader.getResource("testInput.txt").getFile()); 
+0

Спасибо за указатель Рай. Я должен был внести некоторые изменения в ваше предложение кода, чтобы скомпилировать его. В принципе, мне пришлось получить ClassLoader из статического контекста, поэтому я сделал это: 'ClassLoader classLoader = FileReadWriteApp.class.getClassLoader();'. Но второй элемент: «Файл inputFile = new File (classLoader.getResource (« testInput.txt »). GetFile());' keep throwing, 'java.lang.NullPointerException'. Я думаю, приложение не может найти файл по этому пути. Где именно я должен поместить файл, чтобы он работал? – MSR

+0

попробуйте переместить его в web-inf и скажите /testInput.txt – Rai

+0

вы можете увидеть ссылку, которую разделяет Джеймс .. – Rai