Java是否有任何已知的目录选项卡完成库?

时间:2012-03-29 13:36:58

标签: java command-line picocli

我想在从命令行运行的linux / unix环境中创建一个程序。期望的结果是能够选择完整的目录。有没有可用的库来实现这个目标?

剧情简介:/ ho          [tab] / home /

6 个答案:

答案 0 :(得分:2)

来自PrefixFileFilter

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"
  • 将其拆分为最后一个具体部分和要完成的部分/homeJa
  • 列出具体部分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.Filejava.nio.file.Path字段关联的选项,shell将显示与目前用户键入的内容匹配的可用文件和目录。

这实际上不仅处理文件和目录:picocli生成的完成脚本显示已知主机(来自用户的/etc/hosts文件),用于java.net.InetAddress类型的选项,并显示enum任何枚举类型字段上的选项值,包括自定义枚举。

下面的动画演示了什么是可能的。

enter image description here

答案 5 :(得分:0)

JLine可能已不再维护,但仍有相当多的Java项目使用它:

http://jline.sourceforge.net/index.html

但是,如果你知道你想要使用什么Linux / Unix,并且你想要的唯一完成就是简单的文件/目录名,你可以转移问题并在rlwrap下运行你的Java应用程序:

$ rlwrap -c java ...