忍者ブログ
Flex,Java,Html など、調べた事のメモ帳です。 間違ってたらゴメンなさい。
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

URL に proxy 経由で接続する

Java で proxy 経由でURLに接続する方法について解説します。

proxy 経由で接続するには System の property に次の情報を設定する必要があります。

  • proxySet ---- proxy を使用するかどうか
  • proxyHost ---- proxy のホスト名
  • proxyPort ---- proxy のポート番号

起動オプションとして指定する場合


java -DproxySet=true -DproxyHost=<ホスト名> -DproxyPort=<ポート番号> <クラス名>

ソース中に記述する場合

public static void main(String[] args) {
    System.setProperty("proxySet", "true");
    System.setProperty("proxyHost", "ホスト名");
    System.setProperty("proxyPort", "ポート番号");
    try {
        URL url = new URL("http://himtodo.fc2web.com");
        BufferedReader in = new BufferedReader(new InputStreamReader(url
            .openStream()));
        String line;
        while ((line = in.readLine()) != null) {
            System.out.println(line);
        }
        in.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
 



クライアント証明書

SSL が有効な場合に Servlet でクライアント証明書を取得するには、 リクエストがセキュアでなければいけません。 セキュアか否かの確認には、ServletRequest#isSecure() を使います。 その上で、リクエストの属性に設定されているクライアント証明書を取得します。


ソース記述例

if (request.isSecure()) {
    X509Certificate[] certList = (X509Certificate[])request
        .getAttribute("javax.servlet.request.X509Certificate");
    if (certList != null) {
        for (int i = 0; i < certList.length; i++) {
            Principal userDN = certList[0].getSubjectDN();
            System.out.println(userDN);
         }
    }
}



ファイルの一覧を再帰的に探索する

Unix の find コマンドの様に、ファイルの一覧を再帰的に処理を行い、サブディレクトリも含めて全て探索する方法を紹介します。

ファイル名のマッチングには FilenameFilter を利用します。正規表現を使用できるようにしてあります。


FilenameFilter の実装例

public class FileNamePatternFilter implements FilenameFilter {
    private Pattern namePattern_;
 
    public FileNamePatternFilter(Pattern namePattern) {
        if (namePattern == null) {
            throw new NullPointerException();
        }
        namePattern_ = namePattern;
    }
 
    public boolean accept(File dir, String name) {
        return namePattern_.matcher(name).matches();
    }

}
 

ファイルの一覧を取得する為に、FileFinder クラスを作成します。find の機能制限版みたいな物です。
find() にてファイルの探索を行い、listFiles() ファイルの一覧の取得、print() で標準出力への出力を行います。


FileFinder の実装例

public class FileFinder {
    private File base_;
    private FileNamePatternFilter filter_;
    private List list_;
 
    public FileFinder(File base, Pattern pattern) {
        if (base == null || pattern == null) {
            throw new NullPointerException();
        }
        base_ = base;
        filter_ = new FileNamePatternFilter(pattern);
        list_ = new ArrayList();
        find();
    }
 
    public FileFinder(File base, String regex) {
        this(base, Pattern.compile(regex));
    }
 
    public FileFinder(String baseDir, String regex) {
        this(new File(baseDir), Pattern.compile(regex));
    }
 
    public File[] listFiles() {
        File[] arr = new File[list_.size()];
        return (File[])list_.toArray(arr);
    }
 
    public String[] list() {
        List list = new ArrayList();
        for (Iterator it = list_.iterator(); it.hasNext();) {
            list.add(((File)it.next()).getPath());
        }
        String[] arr = new String[list.size()];
        return (String[])list.toArray(arr);
    }
 
    public void print() {
        String[] lists = list();
        for (int i = 0; i < lists.length; i++) {
            System.out.println(lists[i]);
        }
    }
 
    public void find() {
        list_.clear();
        findPattern(base_);
        findDirectory(base_.listFiles());
    }
 
    private void findDirectory(File[] baseDirs) {
        for (int i = 0; i < baseDirs.length; i++) {
            findPattern(baseDirs[i]);
            if (baseDirs[i].isDirectory()) {
                findDirectory(baseDirs[i].listFiles());
            }
        }
    }
 
    private void findPattern(File directory) {
        File[] matches = directory.listFiles(filter_);
        for (int i = 0; i < matches.length; i++) {
            list_.add(matches[i]);
        }
    }
 
    // print.
    public static void main(String[] args) {
        try {
            FileFinder finder = new FileFinder(args[0], args[1]);
            finder.print();
        } catch (Exception e) {
            System.err
                .println("Usage:java com.fc2web.himtodo.FileFinder"
                        + " directory regex");
            System.exit(-1);
        }
    }
}
 



HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet();
sheet.autoSizeColumn(
0);




ファイルのコピーは java.io.File では出来ません。自分で Stream を開いて、 入力から出力へデータを流し込む必要があります。


ソース記述例

public static void copy(File from, File to) throws IOException {
  BufferedOutputStream out = null;
  BufferedInputStream in = null;
  try {
    in = new BufferedInputStream(new FileInputStream(from));
    out = new BufferedOutputStream(new FileOutputStream(to));
    byte[] buff = new byte[4096];
    int len = 0;
    while ((len = in.read(buff, 0, buff.length)) >= 0) {
      out.write(buff, 0, len);
    }
  } finally {
    if (in != null) {
      try {
        in.close();
      } catch (IOException e) {
      }
    }
    if (out != null) {
      try {
        out.close();
      } catch (IOException e) {
      }
    }
  }
}
 



ブログランキング
にほんブログ村 IT技術ブログ IT技術メモへ
 
カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
人気ブログランキング
ブログランキング ブログランキング
最新TB
ブログ内検索
PR
ATOM  
ATOM 
RSS  
RSS 
Copyright ©   プログラムメモ   All Rights Reserved
Design by MMIT  Powered by NINJA TOOLS
忍者ブログ [PR]