2016-10-03 75 views
-1
  1. 字符串testpath1 = 「SMB:// host_address/File_Folder」;
  2. File testFile1 = new File(testpath1 + fi.getName());
  3. fi.write(testFile1);

此代碼在Java中讀取和Linux服務器寫入文件。但是,創建文件(在第2行)後,文件路徑變爲smb:/host_address/File_Folder/File_Name如何在Java中使用 '//' 在創建文件

我想作爲smb://host_address/File_Folder/File_Name文件路徑。

請幫忙!

+0

問題前三行的列表是什麼?它不應該是一個代碼塊嗎? –

+0

是的,它是代碼塊。給出行號應該很容易閱讀。 – saher

+0

我不認爲人們在閱讀沒有行號的三行代碼時會有問題。目前它沒有被格式化爲代碼,這實際上使其更難閱讀。請刪除行號,並簡單地用四個空格縮進代碼,將其變成代碼塊。堆棧溢出會照顧到它的可讀性:) –

回答

0

Java File類將路徑名轉換爲抽象路徑名,具體取決於它所運行的環境。 。抽象路徑名有兩個組件:

  1. 可選系統相關的前綴字符串,如磁盤驅動器符,「/」爲UNIX根目錄,或在Microsoft Windows UNC路徑「\\」
  2. 的零個或多個字符串名稱

我猜的Java可能會使用基於Unix系統的抽象路徑名在您的情況導致失去一個/

您需要使用SmbFile類打開序列一個SmbFile SmbFile file = new SmbFile(testpath1 + fi.getName()) 有關更多信息,您可以看到SmbFile docJava File

+0

謝謝你Jainul!我正在使用FileItem(fi),其寫入方法需要File對象。 fi.write(文件文件)。如果我使用SmbFile,那麼如何將SmbFile對象轉換爲文件? – saher

+0

你可以在這裏閱讀更多。 http://stackoverflow.com/a/36473193/6912578 – Moonstruck

0

編輯:錯誤的方法。

連續四個斜線可能會起作用。在Java和其他幾種語言中,//被簡化爲/,因爲/是一個轉義字符,用於插入不可見字符,如製表符和換行符。測試////

參見:What are all the escape characters in Java?

+0

根據我的理解,'\'是一個轉義字符。 '////'不起作用:( – saher

+0

這聽起來更準確,是的,祝你好運! – davidtheterp

0

沒有得到解決使用「//」在Java中,但如果任何開發人員要使用Java編程,然後 Linux服務器上上傳文件,他/她可以使用下面的代碼片段。思想可能會對像我這樣的開發人員有所幫助:)

SmbFile originalFile = new SmbFile(filePath + fi.getName()); 
InputStream in; 
in = fi.getInputStream(); //fi is FileItem 
SmbFileOutputStream out; 
out = new SmbFileOutputStream(originalFile); 
IOUtils.copy(in, out); 
in.close(); 
out.close();