私はUNIXシステムからJavaを使用しているWindows上のローカルシステムにファイルを取得したいと思います。私はこのコンセプトに非常に新しいです。どのようにそれを行うことができるかに関する任意のアイデア?このタスクのための最高のJava APIはどれですか?Javaを使用してUnixからWindowsにファイルを転送する
答えて
私は非常に有用で、まっすぐ序文ことJSchを発見しました。以下は、すべての.txtファイルをsftpサーバー上の指定されたフォルダに配置するために作成されたコードのスニペットです。
public static void sftpConnection() {
// Object Declaration.
JSch jsch = new JSch();
Session session = null;
Channel channel = null;
// Variable Declaration.
String user = "foo";
String host = "10.9.8.7";
Integer port = 22;
String password = "test123";
String watchFolder = "\\localhost\textfiles";
String outputDir = "/remote/textFolder/";
String filemask = "*.txt";
try {
session = jsch.getSession(user, host, port);
/*
* StrictHostKeyChecking Indicates what to do if the server's host
* key changed or the server is unknown. One of yes (refuse connection),
* ask (ask the user whether to add/change the key) and no
* (always insert the new key).
*/
session.setConfig("StrictHostKeyChecking", "no");
session.setPassword(password);
session.connect();
channel = session.openChannel("sftp");
channel.connect();
ChannelSftp sftpChannel = (ChannelSftp)channel;
// Go through watch folder looking for files.
File[] files = findFile(watchFolder, filemask);
for(File file : files) {
// Upload file.
putFile(file, sftpChannel, outputDir);
}
} finally {
sftpChannel.exit();
session.disconnect();
}
}
public static void putFile(File file, ChannelSftp sftpChannel, String outputDir) {
FileInputStream fis = null;
try {
// Change to output directory.
sftpChannel.cd(outputDir);
// Upload file.
fis = new FileInputStream(file);
sftpChannel.put(fis, file.getName());
fis.close();
} catch{}
}
public static File[] findFile(String dirName, final String mask) {
File dir = new File(dirName);
return dir.listFiles(new FilenameFilter() {
public boolean accept(File dir, String filename)
{ return filename.endsWith(mask); }
});
}
ありがとう – user1585111
複数の選択肢があります。 Javaクライアントとサーバーの間の最初の単純なソケット通信。あなたがこのアプローチに行きたい場合は、この従ってください:
http://mrbool.com/file-transfer-between-2-computers-with-java/24516
を次に、このようなFTP、HTTPとして使用することができ、他の高レベルプロトコルの実装はなど、ある
はSOポスト関連に従ってくださいJava FTPクライアントサーバー:FTP client server model for file transfer in Java
ありがとう、良い情報があります。これらのことを非常に簡単にするJava APIはありますか? – user1585111
@ user1585111 java apisが利用可能で、ソケット通信に広く使用されています。これを確認してください:http://download.oracle.com/javase/tutorial/networking/sockets/ –
jschはこのタスクを達成するのに役立ちますか? – user1585111
UnixマシンがSFTPをサポートする場合、JSchはオプションです。あなたのニーズを満たすために、次のコードを適応させることができます:
private static final String USER_PROMPT = "Enter [email protected]:port";
private static final boolean USE_GUI = true;
public static void main(final String[] arg) {
Session session = null;
ChannelSftp channelSftp = null;
try {
final JSch jsch = new JSch();
final String defaultInput = System.getProperty("user.name") + "@localhost:22";
String input = (USE_GUI) ? JOptionPane.showInputDialog(USER_PROMPT, defaultInput) : System.console().readLine("%s (%s): ", USER_PROMPT, defaultInput);
if (input == null || input.trim().length() == 0) {
input = defaultInput;
}
final int indexOfAt = input.indexOf('@');
final int indexOfColon = input.indexOf(':');
final String user = input.substring(0, indexOfAt);
final String host = input.substring(indexOfAt + 1, indexOfColon);
final int port = Integer.parseInt(input.substring(indexOfColon + 1));
jsch.setKnownHosts("/path/to/known_hosts");
// if you have set up authorized_keys on the server, using that identitiy
// with the code on the next line allows for password-free, trusted connections
// jsch.addIdentity("/path/to/id_rsa", "id_rsa_password");
session = jsch.getSession(user, host, 22);
final UserInfo ui = new MyUserInfo();
session.setUserInfo(ui);
session.connect();
channelSftp = (ChannelSftp) session.openChannel("sftp");
channelSftp.connect();
channelSftp.get("/remotepath/remotefile.txt", "/localpath/localfile.txt");
} finally {
if (channelSftp != null) {
channelSftp.exit();
}
if (session != null) {
session.disconnect();
}
}
}
public static class MyUserInfo implements UserInfo {
private String password;
@Override
public String getPassword() {
return password;
}
@Override
public boolean promptYesNo(final String str) {
final Object[] options = {"yes", "no"};
final boolean yesNo = (USE_GUI) ? JOptionPane.showOptionDialog(null, str, "Warning", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options[0]) == 0 : System.console().readLine("Enter y or n: ").equals("y");
return yesNo;
}
@Override
public String getPassphrase() {
return null;
}
@Override
public boolean promptPassphrase(final String message) {
return true;
}
@Override
public boolean promptPassword(final String message) {
if (!USE_GUI) {
password = new String(System.console().readPassword("Password: "));
return true;
} else {
final JTextField passwordField = new JPasswordField(20);
final Object[] ob = {passwordField};
final int result = JOptionPane.showConfirmDialog(null, ob, message, JOptionPane.OK_CANCEL_OPTION);
if (result == JOptionPane.OK_OPTION) {
password = passwordField.getText();
return true;
} else {
return false;
}
}
}
@Override
public void showMessage(final String message) {
if (!USE_GUI) {
System.console().printf(message);
} else {
JOptionPane.showMessageDialog(null, message);
}
}
}
ありがとうございます – user1585111
きれいに使用され、非常にエレガントなアプローチ。 –
channelSftp.get( "/ remotepath/remotefile.txt"、 "/localpath/localfile.txt");特に役に立ちます – parishodak
- 1. Jschを使用してUnixからWinxpサーバにファイルを転送
- 2. SFTPサーバーからJavaを使用してローカルシステムにファイルを転送
- 3. Unix ServerからWindowsマシンにfilrを転送する方法
- 4. Pythonを使用してローカルマシンからリモートWindowsサーバにファイルを転送する
- 5. WindowsからSCPを使用したLinuxへのJenkinsファイル転送
- 6. FTPサーバーからローカルUNIXサーバーにファイルを転送する
- 7. unixサーバでコマンドBTOPUTを使用してXFBファイルを転送する方法
- 8. シェルスクリプトを使用してリモートサーバーからsftpにファイルを転送
- 9. RAMへのUnixファイル転送
- 10. Java I/Oを使用して1つのファイルから別のファイルにテキストを転送する方法
- 11. PHP - サーバーからWindows PCにファイルを転送する
- 12. vmware ubuntuからwindows ubuntuにファイルを転送する
- 13. Hudson/Jenkins - linuxからwindowsにファイルを転送する
- 14. WindowsサーバーからLinuxサーバーにファイルを転送する方法
- 15. WindowsからpscpでLinuxボックスにファイルを転送する
- 16. Windows用httpsを使用しないCordovaファイル転送プラグ
- 17. MySqlからJavaのNoSqlにデータを転送する際にファイルを中間層として使用する
- 18. Javaを使用してリモートマシンのファイルに文字列コンテンツを転送する
- 19. SFTPを使用してローカルマシンからリモートマシンにファイルを転送する
- 20. クラウドスルーネットワークのUNIXサーバーから共有フォルダにファイルを転送するには?
- 21. Javaを使用してWebサーバーにテキストデータを転送する
- 22. .rarから.zipにファイルを転送せずに転送する
- 23. あるWindowsマシンから別のWindowsマシンにzipファイルを転送する
- 24. UnixからウィンドウにPDFを転送するWinSCP
- 25. JavaのUDP - クライアントにサーバーからファイルを転送する方法
- 26. パラメータに基づいてUnixからWindowsにファイルをコピーする
- 27. GNU/Linuxでlnkファイルを作成してWindowsに転送する
- 28. IPアドレスを使用してazure vmにファイルを転送する
- 29. Cを使用して別のPCにファイルを転送する
- 30. CFWriteStreamを使用してファイルをソケットに転送する
Javaを具体的に使用する理由を説明できますか? SambaやSFTPは、既にこれを行っている、すぐにインストールできるオプションとして動作しています。 – chrylis