gpt4 book ai didi

java - 如何从注释处理器创建文件名中带有空格的资源

转载 作者:行者123 更新时间:2023-12-01 17:25:32 28 4
gpt4 key购买 nike

使用javax.annotation.processing.Processor在编译时生成资源文件时,无法创建文件名中带有空格的文件。

重现问题的简化代码:

public class SampleAnnotationProcessor extends AbstractProcessor {

@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment env) {
for (Element element : env.getElementsAnnotatedWith(SampleAnnotation.class)) {
FileObject resource = processingEnv.getFiler()
.createResource(StandardLocation.CLASS_OUTPUT, "configs.generated", "file name with spaces.xml", element);
// ...
}

return true;
}

}

jdk1.8.0_212.jdk上失败:

java.lang.IllegalArgumentException: Invalid relative name: file name with spaces.xml

由于此类资源如果存在于 src/resources 中,则可以很好地打包到 jar 中,因此我认为自动生成时也应该可以实现相同的效果。

有没有办法转义空格,或者做其他事情来在编译时生成此类文件?

最佳答案

作为一种强力方法,重命名生成的文件可以达到目的:

String nameWithoutSpaces = desiredFilename.replace(" ", "-");
FileObject resource = processingEnv.getFiler()
.createResource(StandardLocation.CLASS_OUTPUT, "configs.generated", nameWithoutSpaces, element);

Path generatedResourcePath = Paths.get(resource.toUri());
Path desiredPath = generatedResourcePath.getParent().resolve(desiredFilename);
Files.move(generatedResourcePath, desiredPath, StandardCopyOption.REPLACE_EXISTING);

仍在寻找更传统的方法。引用错误/票据或规范说明,解释为什么资源不能让空间也起作用。

关于java - 如何从注释处理器创建文件名中带有空格的资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61218193/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com