【Java】SVNリポジトリにファイルがあるかどうかを確認する

こんにちは,ここあです.今回のお題目は,Javaを使用してSVNリポジトリに特定のファイルが存在しているかどうかを確認していきたいと思います.なんでJavaなのかって聞かれても気分です,嘘です大人の事情です.

手段

Java SVNとかで検索するとSVN KitとかJavaHLとかが出てくると思います.しかし,SVN Kitは個人で使うならまだしも法人で使うとなると企業によっては敬遠してしまうかもしれません.そしてJavaHLは外部DLLを必要とします.よく調べてないのでアレなんですけど,Wrapper的な立ち位置にいるんでしょうか?

さて,ライブラリがあることはわかりましたが,そもそも存在確認をするだけならライブラリを使う必要なんてなくて,そのファイルに対してリクエストを投げてそのステータスコードを見てしまえばいいんです.そうです,これが本題になります.ちなみにシェルでやるならcurlでも投げておいてくださいって感じです.はい.

実装

まずはその全体像をば.

import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URL;
import java.util.Base64;

public class SVN{
    private String base_; // SVN内を探索するときのベースパス
    private String auth_; // 認証情報

    public SVN(final String _base, final String _user, final String _pass){
        base_ = _base;
        auth_ = "Basic " + Base64.getUrlEncoder().encodeToString((_user + ":" + _pass).getBytes());
    }

    public boolean CheckFileExistence(final String _filepath){
        boolean result = false;
        try{
            String urlString = this.base_ + "/" + _filepath;
            
            // URLに日本語を含む場合はエンコードしなければいけないのでURIを介す
            // また、URIに空白が含まれてはいけないので事前に置換
            URI uri = new URI(urlString.replace(" ", "%20"));
            URL url = new URL(uri.toASCIIString());

            // 接続用オブジェクトの生成
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            
            // タイムアウト関連
            connection.setConnectTimeout(100000);
            connection.setReadTimeout(100000);

            // GETするのでInputをtrue / Outputをfalse 
            // 方向はサーバ → クライアント
            connection.setDoInput(true);
            connection.setDoOutput(false);

            // 認証情報の登録
            connection.setRequestProperty("Authorization", this.auth_);    
            
            // 接続
            connection.connect();
            
            // HTTP 200 OKが帰ってきたときにtrue
            result =  (connection.getResponseCode() == HttpURLConnection.HTTP_OK);
        }catch(Exception e){
            System.out.println(e);
        }finally{
            return result;
        }
    }
}
public class Entry {
	public static void main(String[] args){
		SVN svn = new SVN("https://hoge.fuga.co.jp/svn/sugoi_projct/trunk", "nyan", "myon");
		System.out.println(svn.CheckFileExistence("nanka_sugoi_memo.txt"));
		System.out.println(svn.CheckFileExistence("日本語もいけるよ.txt"));
		System.out.println(svn.CheckFileExistence("パス/潜っても/いいよ.docx"));
	}
}

Basic認証の方法

さて,説明しようと思ったけど対して説明することがあまりありませんでした.ひとつだけ言うとしたら,Basic認証の方法です.curlとかで認証付きのリクエストを投げるとしたら以下のどちらかになると思います.

curl -I https://nyan:myon@hoge.fuga.co.jp/svn/sugoi_project/trunk/nanka_sugoi_memo.txt
curl -I --user nyan:myon https://hoge.fuga.co.jp/svn/sugoi_project/trunk/nanka_sugoi_memo.txt

これ,そのままJavaに落とし込んでもうまくうごきませんから....でことでそのための38行目の処理です.

connection.setRequestProperty("Authorization", this.auth_);

おしまい

参考

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です