我想在从命令行运行的linux / unix环境中创建一个程序。期望的结果是能够选择完整的目录。有没有可用的库来实现这个目标?
剧情简介:/ ho [tab] / home /
答案 0 :(得分:2)
PrefixFileFilter
apache-commons的IO可能会有所帮助:
File dir = new File(".");
String[] files = dir.list(new PrefixFileFilter("ho"));
这将返回当前目录中以ho
开头的文件列表。你会得到余下的。
答案 1 :(得分:2)
GNU" readline"存在一个JNI包装器。库(这是Bash用于制表完成的内容);见http://sourceforge.net/projects/java-readline/。 Tab-completion是一个通用功能,并不特别依赖于文件系统 - 例如,PostgreSQL命令行客户端使用tab-completion来完成表名 - 所以你可能希望将它与{一起使用} Tomasz Nurkiewicz提到的{1}}(或者用于生成文件名列表的其他类似方法)。
答案 2 :(得分:1)
我认为你不需要一个库,只需自己编码即可。 File
类已包含所需的所有内容,如:
File[] listFiles()
boolean isDirectory()
boolean isFile()
然后你只需要创建:
"/home/Ja"
/home
和Ja
new File("/home").listFiles()
partial file.getName().startsWith("Ja")
我想这将是大约50-100个LOC,包括避免奇怪事情所需的所有检查。
如果您想要一个好的方法,请使用FilenameFilter
,这样您就可以在调用listFiles
时直接过滤掉文件,例如
files = folder.listFiles(new PartialFileFilter("Ja"))
答案 3 :(得分:1)
您可以使用最新的JLine版本 最新版本可从https://github.com/jline/jline3获得。 它为目录和文件提供内置的完成程序。
答案 4 :(得分:0)
是否有任何Java库可以使用TAB完成目录来创建命令行应用程序?
您可能对picocli感兴趣。 Picocli是一个单文件Java库,用于构建命令行应用程序,代码几乎为零;它可以生成ANSI彩色使用帮助消息,而picocli支持Linux上的command line autocompletion(以及Windows上的Cygwin和babun)。
这是如何工作的? bash和zsh Unix shell提供了一种称为“可编程完成”的东西,picocli利用它来生成一个自定义脚本,该脚本是根据应用程序中的@Option
和@Command
注释定制的。
安装此脚本后,用户可以键入TAB键,Unix shell将显示可用子命令和选项的列表。对于与java.io.File
或java.nio.file.Path
字段关联的选项,shell将显示与目前用户键入的内容匹配的可用文件和目录。
这实际上不仅处理文件和目录:picocli生成的完成脚本显示已知主机(来自用户的/etc/hosts
文件),用于java.net.InetAddress
类型的选项,并显示enum
任何枚举类型字段上的选项值,包括自定义枚举。
下面的动画演示了什么是可能的。
答案 5 :(得分:0)
JLine可能已不再维护,但仍有相当多的Java项目使用它:
http://jline.sourceforge.net/index.html
但是,如果你知道你想要使用什么Linux / Unix,并且你想要的唯一完成就是简单的文件/目录名,你可以转移问题并在rlwrap下运行你的Java应用程序:
$ rlwrap -c java ...