25-12-2006, 14:18
|
|
|
חבר מתאריך: 25.12.06
הודעות: 2
|
|
אני לא כל כך מכיר אפלטים, אני מפתח אפליקציות, אבל העברת קבצים זה העברת קבצים, והקוד הזה עובד במערכת קיימת בחברה שאני עובד בה:
שים לב שהנחתי ששם הקובץ המקומי הוא אותו שם כמו היעד, אבל אתה יכול לשלוט בזה.
לא טיפלתי בהבדלים בין קבצים בינאריים לקבצי טקסט.
אם זה לא קובץ טקסט, תוסיף:
client.binary()
לפני שאתה מתחיל את ההעלאה/הורדה.
אם זה קובץ טקסט, תוסיף:
client.ascii()
לפני שאתה מתחיל את הפעולה.
לא התייחסתי גם לאפשרות שמדובר בשרת לינוקס או שרת חלונות (צריך להפוך את מפרידי הנתיב :
\ לחלונות:
/ ללינוקס)
צריך גם לטפל בחריגות, אבל זה כבר שטויות אם יש לך סביבת עבודה נורמלית כמו אינטליג'יי
הקוד הזה עובד בג'אווה 1.4 ומעלה לפחות. לא בדקתי את זה על גרסאות קודמות, אולי זה גם יעבוד.
ההורדה היא תהליך מאוד דומה, אבל צריך להפוך את סדר הSTREAMS כך שהINPUT יגיע מהשרת וה OUTPUT יהיה במחשב המקומי, ויכתוב את הקובץ המורד לדיסק שלך.
אצלי במערכת זה גם THREAD נפרד, כדי שהמסך לא יקפא, אבל זו כבר החלטה שלך, וזה תלוי במכונה של המשתמש, ולא תמיד גודל הקובץ מצדיק עוד THREAD, ולכן לא כתבתי פה שום דבר שקשור לזה.
בהצלחה.
public class FTPApplet extends JApplet{String host;
int ip;
String user;
String password;
String remoteDir;
String localDir;
String fileName;
init(){
FtpClient client=new FtpClient(host, port); //provide valid address and port, port is usually 21, but it may very due to server's definitions
client.login(user, password);//user and password must be valid if the server requires authentication
client.cd(dir); //an existing directory on the server;
final TelnetOutputStream telnetOut=client.put(remoteFileName);
final FileInputStream fileIn=new FileInputStream(localDir + File.separator + fileName);
final byte[] byteBuff=new byte[8192];
int readSuccesfull=0;
while((readSuccesfull=fileIn.read(byteBuff))!=-1){
telnetOut.write(byteBuff, 0, readSuccesfull);
}
telnetOut.close();
fileIn.close();
client.closeServer();
}
|