Ele*_*hoy 47 java file-io groovy file-extension
说我有这样的事情:
new File("test").eachFile() { file->
println file.getName()
}
Run Code Online (Sandbox Code Playgroud)
这将打印test
目录中每个文件的完整文件名.是否有一种Groovy方式来获取没有任何扩展名的文件名?(或者我回到正则表达式土地?)
Nik*_*kov 48
我相信最流行的方式是:
file.name.lastIndexOf('.').with {it != -1 ? file.name[0..<it] : file.name}
Run Code Online (Sandbox Code Playgroud)
或者使用简单的正则表达式:
file.name.replaceFirst(~/\.[^\.]+$/, '')
Run Code Online (Sandbox Code Playgroud)
还有一个apache commons-io java lib用于那种目的,如果你使用maven,你很容易依赖它:
org.apache.commons.io.FilenameUtils.getBaseName(file.name)
Run Code Online (Sandbox Code Playgroud)
Pie*_*ier 30
最干净的方式.
String fileWithoutExt = file.name.take(file.name.lastIndexOf('.'))
new File("test").eachFile() { file->
println file.getName().split("\\.")[0]
}
Run Code Online (Sandbox Code Playgroud)
这适用于文件名,如:foo,foo.bar
但是如果你有一个文件foo.bar.jar,那么上面的代码打印出来:foo如果你想要打印出foo.bar,那么下面的代码就可以实现.
new File("test").eachFile() { file->
def names = (file.name.split("\\.")
def name = names.size() > 1 ? (names - names[-1]).join('.') : names[0]
println name
}
Run Code Online (Sandbox Code Playgroud)
FilenameUtils类是apache commons io软件包的一部分,具有可靠的解决方案。用法示例:
import org.apache.commons.io.FilenameUtils
String filename = '/tmp/hello-world.txt'
def fileWithoutExt = FilenameUtils.removeExtension(filename)
Run Code Online (Sandbox Code Playgroud)
这不是常规的方法,但是如果您需要支持很多边缘情况,可能会有所帮助。
最简单的方法是:
'file.name.with.dots.tgz' - ~/\.\w+$/????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
结果是:
file.name.with.dots
Run Code Online (Sandbox Code Playgroud)
也许不像你想象的那么容易,但工作:
new File("test").eachFile {
println it.name.lastIndexOf('.') >= 0 ?
it.name[0 .. it.name.lastIndexOf('.')-1] :
it.name
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
68632 次 |
最近记录: |