Не удалось найти файл, когда код перемещен в CloudHub

Случай использования: чтение содержимого файла в Java (развернуто в облачном хабе).

Проблема: я написал класс Java, который считывает файл, и его содержимое записывается в консоль. Но если тот же код перемещается в облачный хаб, возникает исключение File-not-Found.

Вопрос: я понимаю, что структура папок src/main/resources будет недоступна, каким должно быть расположение файла, который будет использоваться при создании экземпляра File, если код запущен через облачный хаб

Вот фрагмент кода работает только в локальной среде.

package com.testUtil;

import org.mule.api.MuleEventContext;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

import org.mule.api.lifecycle.Callable;

public class TestClass implements Callable {

    @Override
    public Object onCall(MuleEventContext eventContext) throws Exception {

        System.out.println("Files and directories present at src/main/resources are :");

            File folder = new File("./src/main/resources/");
            File[] listOfFiles5 = folder.listFiles();

            for (int i = 0; i < listOfFiles5.length; i++) {
              if (listOfFiles5[i].isFile()) {
                System.out.println("File " + listOfFiles5[i].getName());
              } else if (listOfFiles5[i].isDirectory()) {
                System.out.println("Directory " + listOfFiles5[i].getName());
              }
            }

        System.out.println("expected output is: xsd");


        FileReader fr = new FileReader(folder+"/xsd/Request.xsd"); 
        BufferedReader br = new BufferedReader(fr); 
        String contents=""; 
        String s=""; 
        while((s = br.readLine()) != null) { 

            contents+=s;
        } 
        System.out.println(contents);
        fr.close(); 


        return contents;
    }

}

Но

   this.getClass().getResource("./").getPath();

дает ./mule-3.4.1-R35/conf в качестве вывода.

Так что пытался с нижеприведенным фрагментом, но все же FileNotFoundException

FileReader fr = new FileReader(this.getClass().getResource("./").getPath()+"/xsd/Request.xsd");

Пожалуйста помоги !! Спасибо


person user2944686    schedule 10.01.2014    source источник


Ответы (1)


Файлы в src/main/resources должны быть загружены с помощью пути к классам, а не как файлы.

Я рекомендую использовать Reflections для эффективного сканирования пути к классам.

person David Dossot    schedule 10.01.2014