Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[JAVA] Problem z pobranym plikiem

mores4 23 Sie 2010 18:38 1103 11
  • #1 23 Sie 2010 18:38
    mores4
    Poziom 9  

    Zrobiłem coś takiego, wszystko pięknie ładnie działa, łącze
    się z serwerem, sprawdzam ostatnią datę modyfikacji , plik jest pobierany niestety gdy go chcę otworzyć wywala błąd:

    Code:
    java.sql.SQLException: database disk image is malformed

    a to kod jak łącze się z ftp i pobieram plik
    Code:
    FTPClient ftp = new FTPClient();
    
    try {
                       
                      ftp.connect("ftp.prv.pl");
                         ftp.login("slowniktest","JSkieLog");
                  } catch (SocketException ex) {
                      ex.printStackTrace();
                  } catch (IOException ex) {
                      ex.printStackTrace();
                  }
          int reply = ftp.getReplyCode();
    if(FTPReply.isPositiveCompletion(reply)){
                           System.out.println("Connected Success");
                       }else {
                           System.out.println("Connection Failed");
                           ftp.disconnect();
                       }
          File file  = new File("slownik.sqlite");
           File file2  = new File("wyraz");
     long data1=file.lastModified();
     long data2=file2.lastModified();

            if(data1>data2){
                System.out.println("Na serwerze jest nowszy");
                file.delete();
                try{
                File file3  = new File("slownik.sqlite");
                 
                   
             FileOutputStream  dfile = new FileOutputStream(file3);
            ftp.retrieveFile("slownik.sqlite",dfile);
           
                }
               catch(IOException e){
            System.out.println(e);
            }

    0 11
  • #3 23 Sie 2010 19:49
    mores4
    Poziom 9  

    Przecież SQLite to baza oparta na plikach, więc pobieram plik "baza.sqlite", on chyba nie jest otwarty.

    0
  • #5 23 Sie 2010 20:01
    mores4
    Poziom 9  

    Pobrane przez klienta ftp, np total commander plik działa poprawnie, natomiast pobrany javą już nie, i jest o 1kb większy

    0
  • #7 23 Sie 2010 20:14
    mores4
    Poziom 9  

    Za bardzo nie mam jak podglądnąć czym się różnią, gdy włączę podgląd w total commander to nie widzę różnicy

    0
  • #9 23 Sie 2010 20:58
    mores4
    Poziom 9  

    Są ale pokazują się jakieś krzaki

    0
  • #11 23 Sie 2010 22:01
    mores4
    Poziom 9  

    To może go źle wczytuje, bo ja go wczytuje jako strumień plikowy FileOutputStream

    Dodano po 47 [minuty]:

    Dzięki za pomoc ! Rozwiązałem już problem używając biblioteki import com.jscape.inet.ftp.*; . Pozostał jeszcze tylko problem z zabezpieczeniem bazy.

    0
  • #12 23 Sie 2010 22:49
    przemo_wielki
    Poziom 23  

    Code:
    import java.io.BufferedInputStream;
    
    import java.io.BufferedOutputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.URL;
    import java.net.URLConnection;


    public class Main {

        public static void main(String[] args) {
            URLConnection klient;
            String user="", password="", host="", remoteFile="";

            try {
                URL url = new URL("ftp://"+user+":"+password+"@"+host+"/"+remoteFile+";type=i");
                klient = url.openConnection();

                InputStream is = klient.getInputStream();
                BufferedInputStream bis = new BufferedInputStream(is);

                OutputStream os = new FileOutputStream("nowy");
                BufferedOutputStream bos = new BufferedOutputStream(os);

                byte[] buffer = new byte[1024];
                int readCount;

                while( (readCount = bis.read(buffer)) > 0){
                    bos.write(buffer, 0, readCount);
                }
                bos.close();
                is.close ();

            } catch(Exception ex) {
                ex.printStackTrace();
            }

        }

    }


    Spróbuj czy zadziała. Znalazłem coś takiego u siebie ale widzę że chyba już niepotrzebne.

    0