2013-01-08 166 views
-2

我們有一個企業應用程序,它將一些文件保存在網絡共享(\\ physicalfileserver \ files \)中。我們需要使用網絡共享,因爲應用程序安裝在通過LAN連接的多個物理服務器上分佈的多個應用程序服務器實例上。有時,我們需要在網絡共享本身上創建某些文件的副本,並將其與另一個名稱或新目錄(同一網絡共享中的同一個目錄)保存在同一目錄中(在同一網絡共享上)。什麼是創建文件副本的最有效方式?我不想在網絡上創建任何IO通信,因爲源文件和目標文件駐留在同一臺服務器上。這也增加了創建文件副本所需的時間。然而,從目前爲止我所看到的很難。通過網絡共享創建文件的複製

  • 讀取輸入流中的文件,並通過具有不同路徑/名稱的輸出流將它們寫回服務器。
  • FileUtils.copyFile()來自apache的commons。 JAVA的
  • NIO通道庫(java.nio.channels.FileChannel.transferFrom())

但是,所有的人似乎將文件複製到服務器上執行程序,然後將數據複製回網絡共享,這是不是真的需要。

大師們認爲最好的方法可以處理這種情況嗎?由於一些限制,我只能使用JAVA 1.5/1.6,但也願意使用更高版本的Java。

該應用程序安裝在Windows 2008服務器上,網絡共享也存在於Windows 2008服務器上。

感謝

+0

如果您擔心網絡帶寬問題,請嘗試在存在網絡共享的服務器上發出命令,以便以您的名義複製文件,然後將副本在本地完成。 – MadProgrammer

+0

它是什麼服務器/操作系統? rexec呢? – OldProgrammer

+0

謝謝。我正在考慮這個問題,但希望將它作爲最後的手段,因爲應用程序是多平臺的,我不想創建任何平臺特定的依賴關係。如果我在Unix中使用NFS或GFS掛載,複製的工作確實非常脆弱,但問題主要針對Windows,所以我想知道是否有任何方法可以通過java解決。 – Anshul

回答

0

如果你想避免你可以用Java寫一個小服務器,它會讓你在本地複製文件的網絡流量(這將文件服務器本身上運行)。保證這一點非常重要,因爲如果有人可以使用它來覆蓋系統文件,這可能會帶來巨大的安全風險。

+0

我假設在JAVA中沒有別的辦法可以遠程複製文件呢? rexec是一個很好的幫助,因爲@Leor建議,但我似乎無法找到任何java api實現將使用服務器的本機操作系統功能,我將文件複製到/從。 – Anshul

+0

沒有我能想到的。由於您有域名設置,因此您可以在文件服務器上遠程運行命令。有一個名爲PsExec的微軟工具http://technet.microsoft.com/en-gb/sysinternals/bb897553.aspx可能是有用的。 – Swav