Jcifs kopiowanie plików z Windowsa do Linuksa

0

Witam,
Próbuję napisać klasę do kopiowania plików z udostępnionego na Windowsie folderu do folderu znajdującego się w systemie Linux. Niby wszystko ładnie kopiuje tylko, że np. jak kopiuje plik tekstowy który ma 154 bajtów to utworzony na Linuksie plik ma 156 bajtów. Chciałbym prosić o pomoc w znalezieniu gdzie robię błąd w swoim kodzie?
Porównanie zawartości:
Plik Windows:

Pierwsza linia
Pierkolejna
asfPDFVB
gdVCB
ąśę
łą
WI@#$!%
CVFRrdfs

Plik Linux:

뿃뻃Pierwsza linia
Pierkolejna
asfPDFVB
gdVCB
ąśę
łą
WI@#$!%
CVFRrdfs

Kod klasy kopiującej plik z Windowsa na Linuksa:

public class SmbCopyToLocal {

    private String urlToCopyFile;   // Ściezka do pliku do skopiowania
    private String pathToSaveFile;   //Scieżda do pliku do zapisania
    private NtlmPasswordAuthentication auth;    // Dane do autoryzacji
    private SmbFile smbFile;    // Utworzenie obiektu pliku do otwarcia
    private SmbFileInputStream fileIn;   // Otwarcie strumienia odczytu
    private int sign;   // Utworzenie zmiennej do której będą wczytywane kolejne znaki
    private PrintWriter fileOut;   // Otwarcie strumienia zapisu
//----------------------------------------------------------------------------------------Deklaracja zmiennych oraz obiektów


    public SmbCopyToLocal(String url, String path, String user, String pass) {

        urlToCopyFile = url;
        pathToSaveFile = path;
        auth = new NtlmPasswordAuthentication(null, user, pass);
        try {
            smbFile = new SmbFile(urlToCopyFile, auth);
            fileIn = new SmbFileInputStream(smbFile);
            fileOut = new PrintWriter(pathToSaveFile);
            sign = fileIn.read();

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (SmbException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }   // Konstruktor przyjmujący ściezki odczytu i zapisu

    public void copy() {

        while (sign != -1) {

            fileOut.write(sign);
            try {
                sign = fileIn.read();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        System.out.println("Succesfull");
        fileOut.close();
        try {
            fileIn.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }   // Metoda kupiująca wskazany plik

}
0

Po stronie Linux plik jest zapisywany jako UTF-8 z kodem rozpoznawczym, stąd te dwa dodatkowe bajty.

Proponuję kopiować przez odczyt i zapis tablicy bajtowej tak, jakby to były pliki binarne. Wtedy nie powinny występować zmiany w kopiowanych danych.

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