का उपयोग कर सभी निर्देशिकाओं को एफ़टीपी द्वारा सर्वर पर कॉपी करें मुझे स्थानीय डिस्क से किसी सर्वर को एक निर्देशिका में कॉपी करने की आवश्यकता है। निर्देशिका में कई निर्देशिकाएं, उपनिर्देशिका, और फ़ाइलें शामिल हैं। (निर्देशिकाओं के पदानुक्रम के पेड़ के बारे में सोचें)।जावा
public void saveFilesToServer() throws IOException {
FTPClient ftp = new FTPClient();
ftp.connect(ftp.foobar.com);
if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
ftp.disconnect();
log.fatal("FTP not disconnected");
}
ftp.login("foo", "qwerty");
log.info("Connected to server .");
log.info(ftp.getReplyString());
ftp.changeWorkingDirectory("test");
ftp.makeDirectory("somedir");
ftp.changeWorkingDirectory("somedir");
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
java.io.File srcFolder = new java.io.File(folderPath);
FileInputStream fis = new FileInputStream(srcFolder);
ftp.storeFile (fileName, fis);
ftp.disconnect();
log.info("FTP disconnected");
}
अब, मैं सभी सबडायरेक्टरियों और somedir
की फाइलों के साथ एक निर्देशिका (somedir
) की प्रतिलिपि की जरूरत है:
यहाँ एक फ़ाइल की प्रतिलिपि करने का उदाहरण है।
मुझे लगता है कि एल्गोरिदम को रिकर्सन का उपयोग करना चाहिए। क्या कोई जानता है कि कैसे?
public void saveFilesToServer(String remoteDest, File localSrc) throws IOException {
FTPClient ftp = new FTPClient();
ftp.connect("ftp.foobar.com");
if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
ftp.disconnect();
log.fatal("FTP not disconnected");
}
ftp.login("foo", "qwerty");
log.info("Connected to server .");
log.info(ftp.getReplyString());
ftp.changeWorkingDirectory(remoteDest);
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
try {
upload(localSrc, ftp);
}
finally {
ftp.disconnect();
log.info("FTP disconnected");
}
}
public void upload(File src, FTPClient ftp) throws IOException {
if (src.isDirectory()) {
ftp.makeDirectory(src.getName());
ftp.changeWorkingDirectory(src.getName());
for (File file : src.listFiles()) {
upload(file, ftp);
}
ftp.changeToParentDirectory();
}
else {
InputStream srcStream = null;
try {
srcStream = src.toURI().toURL().openStream();
ftp.storeFile(src.getName(), srcStream);
}
finally {
IOUtils.closeQuietly(srcStream);
}
}
}
IOUtils
Apache Commons IO का एक हिस्सा है:
+1! –