Загрузка файла в java при разработке плагина Intellij idea

Я делаю плагин генератора Spring Boot и хочу загрузить некоторые файлы шаблонов с помощью Velocity и / или Java. Предпочтительно Java.

Теперь проблема в том, что я просто не могу понять, как читать в Java файл шаблона * .vm и преобразовывать его в строковую переменную.

Итак, здесь, на моем снимке экрана, я хочу загрузить свой "java_dto.vm", например, с помощью Java, чтобы его содержимое было преобразовано в строку.

Структура папок и файлы разрабатываемого мной плагина

Вот как выглядит мой файл Java_dto.vm:

package $dtoPackage;
public class $entityName#[[Dto]]# {
    public $entityName#[[Dto]]#() {

  }
}

Я пробовал кое-что в обычном классе Java для загрузки в файл, и это было успешно. Но сейчас в самом плагине я не могу заставить это работать.

Итак, это НЕ мой плагин, а пример, на котором я его опробовал.

Структура проекта пробного кода для загрузки в файл

С кодом я перепробовал все, и все сработало.

`
package com.tutorialspoint;

import org.apache.commons.text.StringSubstitutor;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URISyntaxException;
import java.net.URL;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Main {

  public static void main(String[] args) {


    try {
        // Determine where the input file is; assuming it's in the same 
           directory as the jar
        String fileName = "java_dto.vm";
        File jarFile = new File(Main.class.getProtectionDomain()
        .getCodeSource().getLocation()
        .toURI().getPath());           
        String inputFilePath = jarFile + File.separator + 
        "com\\tutorialspoint\\templates\\" + fileName;

        Path path = Paths.get(inputFilePath);
        String stringFromFile = 
        java.nio.file.Files.lines(path).collect(Collectors.joining());

        Path path2 = Paths.get(inputFilePath);

        String stringFromFile2 = new 
        String(java.nio.file.Files.readAllBytes(path2));

        FileInputStream inStream = new FileInputStream(new 
        File(inputFilePath));

        try {

            // Read in the contents of the input file in a single gulp
            FileChannel fc = inStream.getChannel();
            MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, 
            fc.size());

          System.out.println(Charset.defaultCharset().decode(bb).toString());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            inStream.close();
        }

    } catch (IOException | URISyntaxException e) {
        e.printStackTrace();
    }


    //---------

    try {
        // Determine where the input file is; assuming it's in the same 
        directory as the jar
        String fileName = "java_dto.vm";
        File jarFile = new 
        File(Main.class.getProtectionDomain().getCodeSource()
        .getLocation().toURI().getPath());
        String inputFilePath = jarFile + File.separator +
        "com\\tutorialspoint\\templates\\" + fileName;

        FileInputStream inStream = new FileInputStream(
        new File(inputFilePath));

        try {

            // Read in the contents of the input file in a single gulp
            FileChannel fc = inStream.getChannel();
            MappedByteBuffer bb = fc.map(
             FileChannel.MapMode.READ_ONLY, 0, fc.size());

          System.out.println(Charset.defaultCharset().decode(bb).toString());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            inStream.close();
        }

    } catch (IOException | URISyntaxException e) {
        e.printStackTrace();
    }

    //---------

    try {
        // Determine where the input file is; assuming it's in the same directory as the jar
        String fileName = "java_dto.vm";
        File jarFile = new File(Main.class.getProtectionDomain()
        .getCodeSource().getLocation().toURI().getPath());
        String inputFilePath = jarFile.getParent() + File.separator + 
        "untitled1\\com\\tutorialspoint\\" + fileName;
        FileInputStream inStream = new FileInputStream(
                                new File(inputFilePath));

        try {

            // Read in the contents of the input file in a single gulp
            FileChannel fc = inStream.getChannel();
            MappedByteBuffer bb = fc.map(
            FileChannel.MapMode.READ_ONLY, 0, fc.size());

            // Do something with the read in data
            System.out.println("-----------");
            // hier wordt content uitgeprint

        System.out.println(Charset.defaultCharset().decode(bb).toString());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            inStream.close();
        }

    } catch (IOException | URISyntaxException e) {
        e.printStackTrace();
    }


    Map<String, String> valuesMap = new HashMap<String, String>();
    valuesMap.put("animal", "quick brown fox");
    valuesMap.put("target", "lazy dog");
    String templateString = "The ${animal} jumped over the ${target}.";

    System.out.println("templateString is: ");
    System.out.println(templateString);

    StringSubstitutor sub = new StringSubstitutor(valuesMap);
    String resolvedString = sub.replace(templateString);

    String s = new StringBuilder()
            .append("line1\n")
            .append("line2\n")
            .append("line3\n")
            .toString();
    System.out.println(s);

    String ss = new StringBuilder()
            .append("package $dtoPackage;")
            .append("\n")
            .append("\n")
            .append("public class $entityName#[[Dto]]# {")
            .append("\n")
            .append("\n")
            .append("public void haha() { ")
            .append("\n")
            .append("\n")
            .append("}")
            .append("\n")
            .append("}").toString();
    System.out.println(ss);

    String java_test = "package ${dtoPackage};" +
            "\n" +
            "\n" +
            "public class ${entityName}#[[Dto]]# {" +
            "\n" +
            "\n" +
            " public void haha() { " +
            "\n" +
            " } " +
            " \n " +
            "}";

    Map<String, String> valuesTest = new HashMap<String, String>();
    valuesTest.put("dtoPackage", "com.filip.springboot.dto");
    valuesTest.put("entityName", "Test");

    StringSubstitutor subtest = new StringSubstitutor(valuesTest);
    String resolvedStringTest = subtest.replace(java_test);

    }
 }

`

Кто-нибудь знает, что это можно исправить / решить для использования в плагине для идеи intellij? Таким образом, диалогового окна выбора файла нет, имя и местоположение уже известно (в папке шаблонов).

Уже спасибо за внимание.

Если что-то непонятно, дайте знать, пожалуйста.

Филип

Тот же вопрос здесь, вы нашли способ сделать это?

Pedro Massango 12.05.2021 15:06
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
1
155
0

Другие вопросы по теме