import java.io.*;

public class rozcvicka8 {

  // zlepovanie suborov pomocou vyhladavania
  public static void zlep_bySearch(String path,String outfnamethrows IOException
  {
    File aktDir = new File(path);    // chceme vylistovat adresar path
    File[] subory = aktDir.listFiles();  // ziskame zoznam subrov
    if (subory != null)      // ak nie je prazdny (nebolo nutne)
    {
      FileOutputStream fw = new FileOutputStream(new File(outfname));  // subor, kam budeme zapisovat
      for (int poradie = 0; poradie < subory.length; poradie++)  // chceme kazdy subor prilepit prave raz
      {   // premenna "poradie" urcuje, ktore poradove cislo prave chceme prilepit 
        for (int j = 0; j < subory.length; j++)   // hladame medzi vsetkymi subormi, ten spravny v poradi 
        {
          File frName = new File(path+subory[j].getName());  
          FileInputStream fr = new FileInputStream(frName);   // otvorime subor
          int poradove_cislo=fr.read();
          if (poradove_cislo==poradie)   // porovname prvy znak s "i" - sedi poradie ?
          {
            int c;
            while ((c=fr.read())!=-1)  // citame, kym nedorazime na koniec suboru
              fw.write(c);   // a zapisujeme do vystupneho suboru
          }
          fr.close();  // zavrieme citany subor
        }
      }
      fw.close();  // zavrieme zapisovany subor
    }
  }
  
  // alternativne zlepovanie suborov, ktore si najprv utriedime podla poradia do pola
  public static void zlep_bySort(String path,String outfnamethrows IOException
  {
    File aktDir = new File(path);    // chceme vylistovat adresar path
    File[] subory = aktDir.listFiles();  // ziskame zoznam subrov
    if (subory != null)      // ak nie je prazdny (nebolo nutne)
    {
      FileOutputStream fw = new FileOutputStream(new File(outfname));  // subor, kam budeme zapisovat
      File[] sortsubory=new File[subory.length];  // upraceme si subory podla poradia do pola
      int i;
      for (i = 0; i < subory.length; i++)  // ideme utriedit vstupne subory
      {
        File frName = new File(path+subory[i].getName())
        FileInputStream fr = new FileInputStream(frName);  // otvorime subor
        int poradove_cislo=fr.read();    // nacitame zo suboru poradove cislo 
        sortsubory[poradove_cislo]=frName;  // ulozim subor na spravne miesto v poradi do pola
        fr.close();   // zavrieme citany subor
      }
      for (i = 0; i < subory.length; i++)  // chceme kazdy subor prilepit prave raz
      {
        File frName = new File(path+sortsubory[i].getName())
        FileInputStream fr = new FileInputStream(frName);  // otvorime subor - teraz uz v spravnom poradi

        fr.read();   // musime preskocit poradove cislo ulozene v subore
        int c;
        while ((c=fr.read())!=-1)  // citame, kym nedorazime na koniec suboru
          fw.write(c);     // a zapisujeme do vystupneho suboru
        fr.close();       // zavrieme citany subor
      }
      fw.close();  // zavrieme zapisovany subor      
    }

  }

  
  public static void main(String [] args)
  {
    try {
      zlep_bySearch("data/","search.jpg");  // zlepuje pomocou vyhladavania subory z podadresara "data"      
      zlep_bySort("data/","sort.jpg");  // zlepuje pomocou triedenia subory z podadresara "data"
    catch (IOException e) {
      e.printStackTrace();
    }
  }
  
}