了解intellij如何使用gradle项目和资源文件夹时遇到问题。
我创建了一个默认的gradle项目,它创建了一个模块' group'和一个模块
查看模块组时,src / main / resources文件夹显示为'资源文件夹' (但它不在独立模块中,其中groovy / java / resources都是灰色的)
因此,在编译代码时,排序似乎有效。
但我尝试在groovy脚本中创建一个像这样的文件
File newFile = new File ("resources/temp.txt")
def fpath = newFile.toURL()
if (!newFile.exists()) {
println "creating new $fpath file "
newFile.createNewFile()
}
然而你运行它运行它就像这样失败
creating new file:/D:/Intellij - Azure/quickstart-java/graph/src/main/groovy/playpen/resources/temp.txt file
Caught: java.io.IOException: The system cannot find the path specified
java.io.IOException: The system cannot find the path specified
at java_io_File$createNewFile$1.call(Unknown Source)
at playpen.TinkerPop-Example.run(TinkerPop-Example.groovy:47)
文件似乎有相对根.../src/main/groovy/playpen
,这是我的脚本所在的位置。没有src/main/groovy/playpen/resources/
因此失败
如果使用File("/resources/temp.txt") and look at the URL it shows as
D:\ resources \ temp.txt`默认为与定义脚本的驱动器相同的驱动器。
如果删除资源前缀 - 该文件在playpen中创建 - 再次假设root与源程序脚本相同。
我想要的是从资源中读取文件'文件夹,但除非我转到绝对文件路径,它只是忽略了资源'文件夹,只在groovy源文件夹中查找。
因此,例如,如果我将temp.txt复制到resources
文件夹并运行此
File newFile = new File ("temp.txt")
def fpath = newFile.toURL()
if (!newFile.exists()) {
println "creating new $fpath file "
newFile.createNewFile()
} else {
println "reading file at $fpath"
}
它只是在脚本运行的playpen包中创建一个新的temp.txt,并且没有看到来自资源的副本'文件夹
那么'文件名是什么格式'我使用这样的资源'文件夹自然用于解析文件名 - 无需使用绝对文件名
同样如果想以编程方式创建一个文件并将其保存在'资源中。脚本从src/main/groovy/playpen
运行的文件夹,其中包含将其放在正确位置的路径名
我在这里遗漏了一些基本内容,无法弄清楚如何从资源文件夹中读取/写入。
如果有人能解释我是如何以编程方式命名文件以使它们与项目相关src/main/resources
目录,则非常高兴知道如何
答案 0 :(得分:0)
我在这里使用groovy而不是java(只是更少的样板噪音),以及漂亮的文件groovy方法
步骤 - (1)首先使用System.getProperty(“user.dir”)找到IDE /项目的根目录 (2)获取'this'的当前资源文件 - 从ide运行的类 (3)看看资源是否在$ root / out / test / .. dir中 - 它是一个测试,否则它是你的正常代码。 (4)现在设置resourcePath来纠正src / main / resources或src / test / resources /中的“location” - 然后从这个存根构建其余的文件 (5)检查文件是否存在 - 如果是这样删除并重写它(你可以使这个更聪明) (6)创建文件并填写其内容 完成工作后,此文件现在应该出现在您希望的位置。很高兴采取更聪明的方法来做到这一点 - 但对于其他任何被困的人来说,这似乎是诀窍void exportToFile (dir=null, fileName=null) {
boolean isTest = false
String root = System.getProperty("user.dir")
URL url = this.getClass().getResource("/")
File loc = new File(url.toURI())
String canPath = loc.getCanonicalPath()
String stem = "$root${File.separatorChar}out${File.separatorChar}test"
if (canPath.contains(stem))
isTest = true
String resourcesPath
if (isTest)
resourcesPath = "$root${File.separatorChar}src${File.separatorChar}test${File.separatorChar}resources"
else
resourcesPath = "$root${File.separatorChar}src${File.separatorChar}main${File.separatorChar}resources"
String procDir = dir ?: "some-dir-string"
if (procDir.endsWith("$File.separatorChar"))
procDir = procDir - "$File.separatorChar"
String procFileName = fileName ?: "somedefaultname"
String completeFileName
File exportFile = "$resourcesPath${File.separatorChar}$procDir${File.separatorChar}${procFileName}"
exportFile = new File(completeFileName)
println "path: $procDir, file:$procFileName, full: $completeFileName"
exportFile.with {
if (exists())
delete()
createNewFile()
text = toString()
}
}