import java.io.*; /** Ohjelma, jolla muunnetaan tekstiä merkistöstä toiseen */ public class ConvertEncoding { public static void main(String[] args) { String from = null, to = null; String infile = null, outfile = null; for(int i = 0; i < args.length; i++) { // Jäsennellään // komentoriviargumentit. if (i == args.length-1) usage(); // Argumentilla pitää olla pari. if (args[i].equals("-from")) from = args[++i]; else if (args[i].equals("-to")) to = args[++i]; else if (args[i].equals("-in")) infile = args[++i]; else if (args[i].equals("-out")) outfile = args[++i]; else usage(); } try { convert(infile, outfile, from, to); } // Yritetään muunnosta. catch (Exception e) { // Käsitellään mahdollinen // poikkeus. LocalizedError.display(e); // Määritelty tämän luvun lopussa. System.exit(1); } } public static void usage() { System.err.println("Usage: java ConvertEncoding \n" + "Options: \n\t-from \n\t-to \n\t" + "-in \n\t-out "); System.exit(1); } public static void convert(String infile, String outfile, String from, String to) throws IOException, UnsupportedEncodingException { // Luodaan tavuvirrat. InputStream in; if (infile != null) in = new FileInputStream(infile); else in = System.in; OutputStream out; if (outfile != null) out = new FileOutputStream(outfile); else out = System.out; // Käytetään oletusmerkistöä ellei merkistöä ole erikseen määritelty. if (from == null) from = System.getProperty("file.encoding"); if (to == null) to = System.getProperty("file.encoding"); // Luodaan merkkivirrat. Reader r = new BufferedReader(new InputStreamReader(in, from)); Writer w = new BufferedWriter(new OutputStreamWriter(out, to)); // Kopioidaan merkit syötevirrasta tulosvirtaan. InputStreamReader-olio // muuntaa syöttömerkistöstä Unicode-merkistöön ja OutputStreamWriter- // olio muuntaa Unicode-merkistöstä tulosmerkistöön. Merkit, joita ei // voi esittää tulosmerkistössä, muunnetaan ‘?’-merkeiksi. char[] buffer = new char[4096]; int len; while((len = r.read(buffer)) != -1) // Luetaan dataa. w.write(buffer, 0, len); // Ja kirjoitetaan se ulos. r.close(); // Suljetaan syötevirta. w.flush(); // Tyhjennetään ja suljetaan w.close(); // tulosvirta. } }