2015-01-12 5 views
2

Я хочу знать, как записать файл в папку ресурсов в проекте Spring MVC. Я определил путь ресурсов в web-dispatcher-servlet.xml в
<mvc:resources mapping="/resources/**" location="/resources/" />Записать файл в папку ресурсов весной

Я читал примеры о том, как прочитать файл из папки ресурсов. Но я хочу записать файл в папку ресурсов. Я попытался

ClassLoader classLoader = getClass().getClassLoader(); 
    File file = new File(classLoader.getResource("file/test.xml").getFile()); 
    if (file.createNewFile()) { 
     System.out.println("File is created!"); 
    } else { 
     System.out.println("File already exists."); 
    } 

Но я получаю
Request processing failed; nested exception is java.lang.NullPointerException

+0

Файл уже существует? – Ascalonian

+0

Нет, я хочу создать его –

ответ

2

Это выглядит как ваш призыв к getResource ("Файл/test.xml") вероятно возвращение нуль.

Мне любопытно, каков полный путь к вашему XML-файлу? Чтобы это работало, каталог должен быть размещен в вашем каталоге webapp. Если вы пытаетесь использовать стандартную структуру ресурсов Java (src/main/resources), то это сопоставление Spring MVC не будет работать.

EDIT: После просмотра вашего ответа на комментарий @ Ascalonian это не сработает, так как файл не существует. Как я уже упоминал ранее, getResource ("file/test.xml") вернет значение null, поэтому следующий вызов getFile() будет выбросить NPE. Возможно, вы должны проверить, возвращает ли getResource null и использует это как указание на то, что файл необходимо создать.

2

Если вы хотите создать test.xml файл в каталоге, возвращенный getResource(), попробуйте следующее:

File file = new File(classLoader.getResource(".").getFile() + "/test.xml"); 
if (file.createNewFile()) { 
    System.out.println("File is created!"); 
} else { 
    System.out.println("File already exists."); 
} 

Вызов getFile() на несуществующий файл или каталог будет возвращать нуль, как описан в ответе Рида.

0

Во-первых, вы не должны записывать файл в папку ресурса, так как он будет удаляться всякий раз, когда вы делаете новую сборку. Вместо этого сохраните его в другом месте и укажите путь в файле свойств.

Вы можете использовать следующий способ для создания файла:

String rootPath = System.getProperty("user.dir"); 
File file = new File(StringUtils.join(rootPath, "/any/path/from/your/project/root/directory/" , "test.xml")); 
//Below commented line is what you wish to do. But I recommend not to do so. 
//File file = new File(StringUtils.join(rootPath, "/out/resources/file/" , "test.xml")); 
file.createNewFile(); 
Смежные вопросы