我正尝试在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”命令?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)