-->

Java

自分自身のjarファイルの位置はSystem.getProperty("java.class.path")で取れる。けど、相対パスになることがあるから、FileをPathやらを使って絶対パスを取得する。

package testjarpath;

import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;

public class TestJarPath {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // classパスを取得
        // jarならjarファイル名
        String jar_path = System.getProperty("java.class.path");
        System.out.println(jar_path);
        // ↑これだと、相対パスになることがある。
        // ので、絶対パスを取得する。
        File jar_file = new File(jar_path);
        String jar_path2 = jar_file.getAbsolutePath();
        System.out.println(jar_path2);
        // ↑ これでも中途半端。"/tmp/./TestJarPath.jar"みたいになる。
        
        // ↓ normalize()で正規化する。
        Path path = Paths.get(jar_file.getAbsolutePath());
        String jar_path3 = path.normalize().toString();
        System.out.println(jar_path3);
    }
    
}

このエントリーをはてなブックマークに追加

JavaでJSONを使おうと思うと、別途、JSONライブラリが必要だ。いや、がんばって作るって手もあるが、ライブラリを使うのがいいだろう。けど、最新のJava8 SEでもなんでついてないんだ、こんなの。
って、書いてて思い出したが、.Net Framework(バージョンは覚えていない)にもついてなかったな。

ここでは、google-gsonを使う。

JSON文字列からJavaオブジェクトへの変換とJavaオブジェクトからJSON文字列への変換、それぞれリストになっている場合のサンプルを↓に示す。

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package testgson;

import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import com.google.gson.reflect.TypeToken;
import java.util.List;

/**
 *
 * @author miyamoto
 */
public class TestGson {

    public static class User {
        @SerializedName("ID")   // 変数名とJSONでの項目名が違う場合に使う。
        public int id;
        public String fullname;
        
        public User(int id, String fullname) {
            this.id = id;
            this.fullname = fullname;
        }
        
    }
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Gson gson = new Gson();
        
        // {"ID":123, "fullname":"ほげほげ"}をデシリアライズ
        User user = gson.fromJson("{ \"ID\":123, \"fullname\":\"ほげほげ\"}", User.class);
        System.out.printf("id:%d, fullname:%s\n", user.id, user.fullname);
        System.out.println("----");
        
        // userをシリアライズ
        String str1 = gson.toJson(user);
        System.out.println(str1);
        System.out.println("----");

        // リスト
        // [{"ID":123, "fullname":"ほげほげ"}, {"ID":124, "fullname":"ほげほげ2"}]をデシリアライズ
        List<User> users = gson.fromJson("[{\"ID\":123, \"fullname\":\"ほげほげ\"}, {\"ID\":124, \"fullname\":\"ほげほげ2\"}]",
                new TypeToken<List<User>>() {}.getType());
        users.stream().forEach((u) ->{
            System.out.printf("id:%d, fullname:%s\n", u.id, u.fullname);
        });
        System.out.println("----");

        // usersをシリアライズ
        String str2 = gson.toJson(users);
        System.out.println(str2);
        System.out.println("----");
    }
    
}

実行結果

id:123, fullname:ほげほげ
----
{"ID":123,"fullname":"ほげほげ"}
----
id:123, fullname:ほげほげ
id:124, fullname:ほげほげ2
----
[{"ID":123,"fullname":"ほげほげ"},{"ID":124,"fullname":"ほげほげ2"}]
----

このエントリーをはてなブックマークに追加

別のブログで公開してたものです。
一部をこっちのブログに移行しようと手動で(^^;)移行したものです。

リンク: JavaアプリをExe化するLaunch4jの使い方と仕組み - seraphyの日記.

これでできた。


このエントリーをはてなブックマークに追加

別のブログで公開してたものです。
一部をこっちのブログに移行しようと手動で(^^;)移行したものです。

JavaでCPUコア数の取得方法って、
意外となかなか見つけれなかったのでメモっとく。

int core = Runtime.getRuntime().availableProcessors();

で、論理コア数が取れる。

Androidだと、SDKの説明によると
4.2以上は最大コア数で、
それ以前は、オンラインになっているコア数。つまり、省電力モードや熱などで動作コア数が変化する場合はそのコア数になるようです。



このエントリーをはてなブックマークに追加

別のブログで公開してたものです。
一部をこっちのブログに移行しようと手動で(^^;)移行したものです。

Javaで解像度(dpi)を設定してJPEG保存する方法を調べてみた。

次のようにするとできる。

public static boolean saveJpeg(FileOutputStream outputStream, BufferedImage img, float compression, int dpi) {
	if(compression < 0 || compression > 1f) {
		return false;
	}
	ImageWriter iw = ImageIO.getImageWritersByFormatName("jpeg").next();
	try (ImageOutputStream ios = ImageIO.createImageOutputStream(outputStream)) {
		iw.setOutput(ios);

		JPEGImageWriteParam param = (JPEGImageWriteParam)iw.getDefaultWriteParam();
		param.setCompressionMode(JPEGImageWriteParam.MODE_EXPLICIT);
		param.setCompressionQuality(compression);

		IIOMetadata imageMeta = iw.getDefaultImageMetadata(new ImageTypeSpecifier(img), param);
		Element tree = (Element) imageMeta.getAsTree("javax_imageio_jpeg_image_1.0");
		Element jfif = (Element) tree.getElementsByTagName("app0JFIF").item(0);
		jfif.setAttribute("resUnits", "1");     // 解像度の単位をDPIにする。
		jfif.setAttribute("Xdensity", Integer.toString(dpi));   // 解像度設定
		jfif.setAttribute("Ydensity", Integer.toString(dpi));
		// メタデータを設定
		imageMeta.setFromTree("javax_imageio_jpeg_image_1.0", tree);

		// 書き込み
		iw.write(null, new IIOImage(img, null, imageMeta), param);
	} catch (IOException ex) {
		return false;
	}
	iw.dispose();
	
	return true;
}

このエントリーをはてなブックマークに追加

↑このページのトップヘ