获得一个网址,我想在文件中的URL转移到一个特定的到FTP。 我有两个选择:1)使用外部库(如Apache常见-10)我可以获取URL中的文件,然后上传到FTP。 2)打开两个插座(到url一个到FTP),简单地将文件从网址转移到ftp。
我说的对这个吗? 什么是做到这一点的最好方法是什么?
我使用的是春天。
这里有一些链接,我发现它:
如何下载和使用Java从网络保存文件? 。
这里是Apache共IO库
编辑 :
我处理100-200M的文件。
更新:我选择先下载该文件,然后上传。 我选择这样做,因为我不希望很多问题下载该文件,但我希望将文件上传到FTP服务器的问题。 所以,我认为错误处理会更好的方式。 缺乏这种解决方案的是,我存储在磁盘中的临时文件的事实。 我以后会更新,如果我会遇到一些问题。
1.坦率地讲,如果使用的是开源的,然后采取外部库的优势。
2.不要重新发明轮子 ,您在您的处置信任库 ,所以使用它。
我还附上我的计划,我用来上传和下载歌曲到ftp server
使用apache's common lib
上传:
public void goforIt(){
FTPClient con = null;
try
{
con = new FTPClient();
con.connect("192.168.2.57");
if (con.login("Administrator", "KUjWbk"))
{
con.enterLocalPassiveMode(); // important!
con.setFileType(FTP.BINARY_FILE_TYPE);
String data = "/sdcard/vivekm4a.m4a";
FileInputStream in = new FileInputStream(new File(data));
boolean result = con.storeFile("/vivekm4a.m4a", in);
in.close();
if (result) Log.v("upload result", "succeeded");
con.logout();
con.disconnect();
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
你下载过:
public void goforIt(){
FTPClient con = null;
try
{
con = new FTPClient();
con.connect("192.168.2.57");
if (con.login("Administrator", "KUjWbk"))
{
con.enterLocalPassiveMode(); // important!
con.setFileType(FTP.BINARY_FILE_TYPE);
String data = "/sdcard/vivekm4a.m4a";
OutputStream out = new FileOutputStream(new File(data));
boolean result = con.retrieveFile("vivekm4a.m4a", out);
out.close();
if (result) Log.v("download result", "succeeded");
con.logout();
con.disconnect();
}
}
catch (Exception e)
{
Log.v("download result","failed");
e.printStackTrace();
}
}
IMPORTS :
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
CODE :
public static void main(String args[])
try {
//Create a FTP Client
FTPClient ftp = new FTPClient();
//Set Host Information
ftp.connect(HOST_NAME);
ftp.login(USER_NAME, PASSW)RD);
//Set File Type "Specially for PDF's"
ftp.setFileType(FTP.BINARY_FILE_TYPE, FTP.BINARY_FILE_TYPE);
ftp.setFileTransferMode(FTP.BINARY_FILE_TYPE);
//Change the current Directory to a desired one
ftp.changeWorkingDirectory(SOME_DIRECTORY);
//get File from the FTP location
String fileNames[] = ftp.listNames();
List<String> fTPFileNameList = new ArrayList<String>();
//Iterate to get File Names
if (fileNames != null && fileNames.length > 0) {
for (String fName : fileNames) {
fTPFileNameList.add((new File(fName)).getName());
}
}
// Check the file is present on FTP
if(fileNames != null && fileNames.length > 0 && fTPFileNameList.contains(FILE_NAME)){
//File is present on FTP
} else {
//File is not present on FTP
String httpURL = "YourDesiredURL";
InputStream fis;
try{
fis = new URL(httpURL).openStream();
} catch (FileNotFoundException e) {
//File is not present on the URL
}
ftp.storeFile(FILE_NAME, fis);
fis.close();
}
ftp.logout();
} catch (Exception e) {
e.printStackTrace();
}
}
MAVEN DEPENDENCY :
< dependency>
< groupId>commons-net< /groupId>
< artifactId>commons-net< /artifactId>
< version>1.3.0</ version>
< /dependency>
JAR LOCATION :
http://www.jarfinder.com/index.php/java/info/org.apache.commons.net.ftp.FTPClient