我正在編寫一個java程序來查找目錄中的特定文件(具有特殊權限和文件類型的文件)。由於沒有任何特殊字符,因此以下命令正確執行。如何轉義java特殊字符並運行Linux命令
find /home/Cnf271/Desktop/ -perm -4000 ;
現在,如果我嘗試使用我的java程序執行以下命令,終端不會給出正確的結果。
find /home/Cnf271/Desktop/ -name "*.txt" -perm -4000 -exec ls -ldb {} \;
Java程序,
//
..
System.out.print("Please enter directory path: ");
fileDirectory = scan.next();
System.out.print("Please enter file type (txt/pdf): ");
fileType = scan.next();
filetypecmd = " \"*." +fileType+ "\" ";
System.out.println(filetypecmd);
String cmd = "find "+fileDirectory+ " -name "+filetypecmd+" -perm -4000" ;
Runtime run = Runtime.getRuntime();
Process process = run.exec(cmd);
BufferedReader buffer = new BufferedReader(new InputStreamReader(process.getInputStream()));
String space = "";
while ((space=buffer.readLine())!=null) {
System.out.println(space);
..
//
計劃工作fine.however,String cmd
命令不給我一個正確的結果,因爲Linux的命令是包裹着特殊characters.How我在執行下面的命令我的java程序。
find /home/Cnf271/Desktop/ -name "*.txt" -perm -4000 -exec ls -ldb {} \;
謝謝。被引用
您是否嘗試過將雙反斜線''\\''前';'性格嗎?順便說一下,我沒有看到你在Java代碼中添加';'字符。 Java使用反斜線以及轉義,所以你可能不得不在字符串中「雙重轉義」字符... –
@MaartenBodewes是的我試過反斜槓。 filetypecmd =「\」*。「+ fileType +」\「」;在我的java程序中沒有語法錯誤。我認爲linux不執行該命令,因爲它包含其他字符,如反斜槓。現在,如果我使用轉義字符來隱藏java語法錯誤,java程序可以正常工作。但是,當命令在linux環境中運行時,它不會給出正確的結果。謝謝 – Cnf271
注意:自Java 7以來,您也可以讀取文件權限。 [從Java內部]搜索文件很容易(https://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#getPosixFilePermissions(java.nio.file .Path,%20java.nio.file.LinkOption ...)),迴避問題(XY問題)。 –