Witam, postanowiłem napisać sobie prosty program do synchronizacji katalogów w Javie z obsługa wątków. Program ma sprawdzać katalog B na podstawie zgodności z katalogiem A (wzorcowym) i skopiować nieistniejące pliki. Naskrobałem coś takiego:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Katalogi implements Runnable
{
static Katalogi watki[] = new Katalogi[10];
static File katalogA = new File("A");
static String plikiA[] = katalogA.list();
static BufferedInputStream input;
static BufferedOutputStream output;
static public boolean CzyPlikIstnieje(String plik)
{
File f = new File("B\\"+plik);
if(f.exists())
{
return true;
}
else
{
return false;
}
}
public static void main(String[] args) throws IOException
{
for(int i =0 ; i < plikiA.length; i++)
{
if(CzyPlikIstnieje(plikiA[i]))
{
System.out.println("Plik "+plikiA[i]+" już istnieje w katalogu B");
}
else
{
input = new BufferedInputStream(new FileInputStream("A\\"+plikiA[i]));
output = new BufferedOutputStream(new FileOutputStream("B\\"+plikiA[i]));
Katalogi r = new Katalogi();
watki[i] = r;
Thread t = new Thread(watki[i]);
t.start();
}
}
}
@Override
public void run()
{
byte[] buff = new byte[5*1024];
int c = 0;
try {
while((c=input.read(buff))>0)
{
output.write(buff,0,c);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Niestety jednak przy kopiowaniu więcej niż jednego pliku skopiowane pliki nie są kompletne. podejrzewam że jest to wina obiektów buforujących. Jednak nie mam pomysłu jak utworzyć oddzielny bufor dla każdej iteracji pętli.
Pozdrawiam