package basics.encoding;

import java.io.File;
import java.io.PrintWriter;
import java.io.RandomAccessFile;
import basics.utl.SysUtl;

/**
 * @author kst
 */
public class Recode
{
String          inputcharset  = "utf-16";
String          outputcharset = "utf-8";
private File [] files         = null;

public static void main(String [] args)
{
   Recode r = new Recode(args[0], args[1], args[2]);
   r.recode();
}

public Recode(String folder, String inputcharset, String outputcharset)
{
   this.inputcharset = inputcharset;
   this.outputcharset = outputcharset;
   files = new File(folder).listFiles();
   SysUtl.trace("Folder: " + folder);
   SysUtl.trace(files.length + " files.");
}

public void recode()
{
   for(File f : files)
   {
      SysUtl.trace("Recoding " + f.getName() + " " + inputcharset + " -> " + outputcharset);
      try
      {
         String text = readBytes(f);
         f.delete();
         PrintWriter filewriter = new PrintWriter(f, outputcharset);
         filewriter.println(text);
         filewriter.close();
      }
      catch(Exception e)
      {
         SysUtl.trace("FAILED: " + f.getAbsolutePath());
         e.printStackTrace();
      }
   }
}

String readBytes(File file)
{
   String result = null;
   try
   {
      if(file.exists())
      {
         RandomAccessFile raf = new RandomAccessFile(file, "r");
         byte b[] = new byte [(int)raf.length()];
         raf.readFully(b);
         result = new String(b, inputcharset);
         raf.close();
      }
   }
   catch(Exception e)
   {
      SysUtl.trace("Reading " + file.getName() + " failed. Charset: " + inputcharset + ". Error: "
         + e.getMessage());
   }
   finally
   {
   }
   return result;
}
}
