Pobieranie plików z sieci LAN

0

Witam.

Mam pytanie do bardziej doświadczonych.
Napisałem sobie małą aplikację na androida.
Jedną z opcji jest pobieranie pliku z komputera w sieci. Dokładnie chodzi o aktualizację bazy danych.
Próbowałem już różnych metod i non stop mi aplikację wywala.
Podrzućcie pomysł jak Wy sobie z tym radzicie. Nie chcę gotowego rozwiązania tylko nakierujcie mnie co mam szukać.
Plik jest w formacie txt. Zajmuje ok 4MB. Znajduje się na komputerze o ip 192.168.0.2
Próbowałem zwykłego fileCopy, jakichś streamów, samby i nic.

1

Wystaw to na jakimś serwerze.
Np. WWW lub FTP

1

Nie da sie tak po prostu zabrać komuś pliku z komputera w sieci xD Musi on być wystawiony jakimś serwerem HTTP, FTP czy czymkolwiek innym.

1
johnny9999 napisał(a):

Próbowałem już różnych metod i non stop mi aplikację wywala.

Proponuję dodać logowanie błędów i podesłanie tutaj tych logów (jeśli to ma sens).

Pobranie pliku możesz zrobić na kilka sposobów, kilka wybranych:

0

Plik udostępniony jest na serwerze. Na komputerze wpisuje 192.168.0.2 lub samą nazwę "serwer" i się łączy. Na chwile obecną kopiuję sobie tę bazę w RS eksplorator plików. Chciałbym to robić automatycznie w mojej aplikacji po przyciśnięciu guzika.

1
johnny9999 napisał(a):

Plik udostępniony jest na serwerze. Na komputerze wpisuje 192.168.0.2 lub samą nazwę "serwer" i się łączy. Na chwile obecną kopiuję sobie tę bazę w RS eksplorator plików. Chciałbym to robić automatycznie w mojej aplikacji po przyciśnięciu guzika.

Patrząc na adres IP dalej jest to lokalny adres IP. Jeżeli masz VPS czy coś innego to dodaj SFTP i do niego podpinaj się z telefonu.
Chyba, że czegoś dalej nie rozumiemy - załącz logi to pozwoli nam zrozumieć gdzie leży problem.

0

Jak zrobie normalne kopiowanie to wyskakuje ze nie ma takiego pliku. Po prostu nie wiem jakiej komendy uzyc do kopiowania z sieci

1
johnny9999 napisał(a):

Jak zrobie normalne kopiowanie to wyskakuje ze nie ma takiego pliku. Po prostu nie wiem jakiej komendy uzyc do kopiowania z sieci

Musisz jakoś udostępnić ten plik. Od sposobu udostępnienia pliku jest uzależniona forma dostępu do niego. A ty w kółko że nie możesz go skopiować jak pliku. Opisz sytuację dokładnie co jak gdzie masz skonfigurowane jaki kod wykonujesz itd.

2
  1. Wystaw sobie na tym komputerze gdzie jest plik tzw. połączenie SFTP (połączenie dość często używane w lokalnej sieci LAN)
  2. W programie, który masz w Javie w Mavenie może sobie dodać dependencję do kominikacji po sftp, nastepnie łączysz się z serwerem.
0

Plik jest udostępniony w sieci. W sumie dostęp do całego serwera jest odblokowany dla wszystkich urzadzeń. Na komputerze mogę go skopiować, na telefonie w RS Esplorer też mogę bez problemu to zrobić. No ale chciałem mieć to z poziomu mojej aplikacji.

W android studio kombinuję z dwoma metodami:

try {


                    SmbFile from = new SmbFile("smb://192.168.0.2/comarch/kolektor/u");
                    SmbFile to = new SmbFile("file:////storage/emulated/0/Download/out.txt");
                    to.createNewFile();
                    from.copyTo(to);

            } catch (MalformedURLException | SmbException ex) {
                    toastAnywhere(ex.toString());
            }

W tej wyskakuje bład "The network name cannot be found."

Natomiast w tej:

try {
                SmbFile source =
                        new SmbFile("smb://192.168.0.2/comarch/kolektor/u");

                File destination =
                        new File(ET.getText().toString());

                SmbFileInputStream in = new SmbFileInputStream(source);
                OutputStream out = new FileOutputStream(destination);

                // Copy the bits from Instream to Outstream
                byte[] buf = new byte[1024];
                int len;
                while ((len = in.read(buf)) > 0) {
                    out.write(buf, 0, len);
                }
                // Maybe in.close();
                in.close();
                out.close();


            } catch (Exception e) {
                toastAnywhere(e.toString());

            }

wyskakuje że nie ma pliku docelowego. Nieważne co wpiszę zawsze to samo. Czy plik o tej nazwie istnieje czy nie też to samo.

Na angielskich stronach znalazłem że obie metody powinny działać. Pewnie u mnie jakaś drobnostka jest nie tak.

AAA i uprzedzę pytania!! Tak plik źródłowy nazywa się po prostu "u" bez żadnej końcówki.

0

Dla zainteresowanych tematem wreszcie zadziałała ta opcja:

String destFilename;
        FileOutputStream fileOutputStream;
        InputStream fileInputStream;
        byte[] buf;
        int len;
            destFilename = "/storage/emulated/0/Download/out.txt";

             try {
                SmbFile from = new SmbFile("smb://192.168.0.2/comarch/kolektor/u");
                fileOutputStream = new FileOutputStream(destFilename);
                fileInputStream = from.getInputStream();
                buf = new byte[16 * 1024 * 1024];
                while ((len = fileInputStream.read(buf)) > 0) {
                    fileOutputStream.write(buf, 0, len);
                }
                fileInputStream.close();
                fileOutputStream.close();

        } catch (Exception ex) {
            toastAnywhere(ex.toString());
        }

Dzięki za próbę pomocy!

1 użytkowników online, w tym zalogowanych: 0, gości: 1