如何在java中使用“ls * .c”命令?【JAVA教程】

!
也想出现在这里? 联系我们
信息

如何在java中使用“ls * .c”命令?,第1张

概述如何在java中使用“ls * .c”命令

我正尝试在java中打印“* .C”文件

我使用下面的代码

public static voID getfileList(){ try { String lscmd = \”ls *.c\”; Process p=Runtime.getRuntime().exec(lscmd); p.waitFor(); BufferedReader reader=new BufferedReader(new inputStreamReader(p.getinputStream())); String line=reader.readline(); while(line!=null) { System.out.println(line); line=reader.readline(); } } catch(IOException e1) { System.out.println(\”Pblm found1.\”); } catch(InterruptedException e2) { System.out.println(\”Pblm found2.\”); } System.out.println(\”finished.\”); }

PS: – 对于“ls”命令来说工作正常。当我在任何命令中使用“*”时,一切都不起作用。 在java中的命令需要replace“*”。

UPDATE

Grep以“S +”状态启动

linux命令行如何接受蓝牙设备的无配对配对

如何从linux命令行纵向连接SVG文件?

设置git描述为一个shellvariables

linux / Bash:如何取消引用?

谢谢你们的帮助

现在我需要在java中评论“ls -d1 $ PWD / **”的结果。 它将用完整path列出所有的目录名称。

谢谢你的时间。

命令Python2找不到

在node.Js中输出完整的错误对象

如何在msysgit / Cygwin脚本中testingpipe理员权限?

有没有从命令行确定.NET Framework版本的方法?

linux的头部/尾部有偏移量

你可能会发现这更可靠:

Path dir = Paths.get(\”/path/to/directory\”); try (DirectoryStream<Path> stream = files.newDirectoryStream(dir,\”*.c\”)) { for (Path file : stream) { // Do stuff with file } }

或者,您可以使用public file[] file.Listfiles(filenameFilter filter)

file[] files = dir.Listfiles(new filemaneFilter() { public boolean accept(file dir,String name) { return name.endsWith(\”.c\”); } }

Java的方法是使用filenameFilter 。 我从这里调整了一个代码示例:

import java.io.file; import java.io.filenameFilter; public class Filter implements filenameFilter { protected String pattern; public Filter (String str) { pattern = str; } public boolean accept (file dir,String name) { return name.tolowerCase().endsWith(pattern.tolowerCase()); } public static voID main (String args[]) { Filter nf = new Filter (\”.c\”); // current directory file dir = new file (\”.\”); String[] strs = dir.List(nf); for (int i = 0; i < strs.length; i++) { System.out.println (strs[i]); } } }

更新:

对于你的更新,你可以遍历一个new file (\”.\”).Listfiles(); 并在每个文件上发出file.getabsolutePath() 。

自Java 7以来列出文件的一个示例。

import java.io.IOException; import java.nio.file.DirectoryStream; import java.nio.file.files; import java.nio.file.Path; import java.nio.file.Paths; public class Main { public static voID main(String[] args) { Path dir = Paths.get(\”/your/path/\”); try { DirectoryStream<Path> ds = files.newDirectoryStream(dir,\”*.{c}\”); for (Path entry: ds) { System.out.println(entry); } } catch (IOException e) { e.printstacktrace(); } } }

你需要执行形式为“bash -c\’ls * .c\’”的命令,因为java exec方法不理解\’*\’扩展(globbing)。 (“bash -c”形式确保使用shell来处理命令行。)

但是,不能简单地将上面的命令作为单个字符串提供给Runtime.exec(…) ,因为exec也不理解将正引用的acommand字符串拆分的正确方法。

因此,为了让exec做正确的事情,你需要做这样的事情:

String lscmd = \”ls *.c\”; Process p = Runtime.getRuntime().exec(new String[]{\”bash\”,\”-c\”,lscmd});

换句话说,你需要手动进行参数分割。

应该注意的是,这个例子也可以通过使用fileMatcher执行“globbing”并从结果中组装参数列表来实现。 但是,如果你要做的不是运行ls而是复杂的,而且IMO的复杂性是不合理的。

*由shell扩展。 所以要使用它来扩展一个文件名作为glob,你将不得不通过一个shell来调用ls命令,例如:

String lscmd = \” bash -c \’ls *.c\’ \”;

编辑

@Stephen的好点,关于exec无法分裂的命令。 要执行ls -d1 $PWD/*你可以这样做:

String lscmd = \”ls -d1 $PWD/*\”; Process p = Runtime.getRuntime().exec(new String[]{\”bash\”,lscmd});

我知道,它不直接回答你的问题,但如果可以的话,更喜欢 *** 作系统无关的方式列出目录中的文件。

优点是 – 不是Unix / linux的特定不需要产生这个过程(它非常昂贵)。

在这里你可以找到一个如何在java中执行此 *** 作的示例:

列出目录中的文件

希望这可以帮助

总结

以上是内存溢出为你收集整理的如何在java中使用“ls * .c”命令?全部内容,希望文章能够帮你解决如何在java中使用“ls * .c”命令?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

© 版权声明
THE END
喜欢就支持一下吧
点赞169 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容