2012年12月16日日曜日

java : URLエンコード

URLエンコードをする小さなプログラムです。 どこにでも載ってそうなモノですが、次のネタ(データURIスキーム)で使うので一応掲載。 リダイレクトして使う事を想定しています。

java SimpleUrlEncoder utf8.txt > res.txt

以下、コードです。

// SimpleUrlEncoder.java
import java.io.File;
import java.io.FileInputStream;
import java.net.URLEncoder;

public class SimpleUrlEncoder {

    public static final long MAX_FILE_SIZE = 1000000;

    public static void main(String[] args) {
        if(args.length != 1)
        {
            System.err.println("第1引数のファイルをURLエンコードします。標準出力に出力します。");
            return;
        }

        File file = new File(args[0] );
        long len = file.length();
        if(MAX_FILE_SIZE < len)
        {
            System.err.println("ファイルサイズが大きすぎる。");
            return;
        }

        try(FileInputStream fis = new FileInputStream(file) )
        {
            byte[] data = new byte[ (int)len];
            long readLen = fis.read(data);
            if(len != readLen)
            {
                System.err.println("ファイル読み込み失敗");
                return;
            }
            String text = new String(data, "UTF-8");
            text = URLEncoder.encode(text, "UTF-8");
            text = text.replaceAll("\\+", "%20");
            System.out.println(text);
        }
        catch(Exception exc)
        {
            System.err.println("ファイル読み込み or 変換失敗");
            exc.printStackTrace();
        }
    }
}