![](/img/trans.png)
[英]Java - The system cannot find the file specified when using ProcessBuilder directory()
[英]How can I traverse to parent directory when calling PSCP using Java's ProcessBuilder?
我正在使用以下代碼從 Java 調用 pscp:
public static ArrayList<String> runWindowsCommand(String... args) throws WindowsCmdFault {
try {
ProcessBuilder pb = new ProcessBuilder(args);
Process p = pb.start();
//...
//... code to fetch the output and return it back
}catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
我調用這個函數如下:
runWindowsCommand("C:\Program Files (x86)\PuTTY\pscp" -pw "password" -r folder/file_to_be_transferred.txt "username@hostname:/remote/unix/server/location/folder_name")
這執行良好並顯示以下輸出:
Arraylist returned (output) =
[, file_to_be_transferred.txt | 3 kB | 2.7 kB/s | ETA: 00:00:00 | 100%]
看來轉移成功了。 除了當我通過 putty 登錄到遠程 unix 服務器並檢查該文件時,它顯示沒有任何更新。
該文件的權限已設置為666。
當我直接在cmd 提示符下執行這個相同的命令(我們發送給函數)時,它會給出相同的輸出並且文件被實際傳輸。
當我通過上面給出的 Java 代碼運行相同的命令時,文件實際上並未傳輸。
為什么 PSCP 不傳輸文件?
更新:經過進一步調查,非常感謝@Martin Prikryl,我能夠將這個問題縮小到根本原因。
根本原因:問題是當從 PSCP 建立用戶連接時,它默認連接到(root)/home/username
。
我們需要遍歷的目錄位於
(root)/www/....lengthy/folder/here .
遺留問題:
我試圖在連接后向上遍歷文件夾。 我正在嘗試添加一個雙周期,以便在提供我的路徑之前向上遍歷根。 但它不起作用。
我正在嘗試使用 pscp 作為遠程主機名:
../../www/..lengthy/folder/here
但是當通過 Java 執行但通過 cmd 提示符工作時,這會由於某種奇怪的原因而失敗。
如何在包含我的實際路徑之前添加包含第二個父級的遠程路徑?
使用 Java + PSCP 時似乎有一些限制。 我通過將文件上傳到默認目錄解決了這個問題。 之后,我通過 putty 的命令行建立連接並將文件傳輸到所需的目的地。 我把我的答案放在這里。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.