→Java関連Tips
クラスロード時に実行されるコード†
public class testmain {
static {
try {
Runtime r = Runtime.getRuntime();
Process p = r.exec("C:\\WINDOWS\\system32\\notepad.exe");
System.out.println("実行した");
p.waitFor();
System.out.println("メモ帳閉じた");
p.destroy();
System.out.println("destroyed");
} catch (Exception ex) {
ex.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("The main function is called.");
}
}
テキストファイルの読み込み†
イメージをpngファイルに出力†
/**
* pngファイルに出力
* @param im 出力したいイメージ
* @param fname 出力ファイル名
* @throws FileNotFoundException
* @throws IOException
*/
public static void savePng(BufferedImage im, String fname)
throws FileNotFoundException, IOException {
// Open output file.
OutputStream out = new FileOutputStream(fname);
ImageOutputStream ios =
ImageIO.createImageOutputStream(out);
ImageWriter iw = (ImageWriter)ImageIO.
getImageWritersByFormatName("png").next();
iw.setOutput(ios);
iw.write(im);
// Close output file.
out.close();
}
イメージ⇔バイト列の変換†
/**
* イメージをバイト列に変換する
* @param im イメージ
* @param formatName フォーマット名 png, bmp, jpeg など
* @return バイト列
* @throws IOException
*/
public static byte[] getBytesFromImage(BufferedImage im, String formatName)
throws IOException{
if(formatName == null)
formatName = "png";
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ImageIO.write(im, formatName, bos);
return bos.toByteArray();
}
/**
* バイト列からイメージを作成する
* @param bytes
* @return イメージ
* @throws IOException
*/
public static BufferedImage getImageFromBytes(byte[] bytes)
throws IOException{
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
BufferedImage im = ImageIO.read(bis);
return im;
}
フォントにアンチエイリアスをかける†
- 参考ページ:http://itpro.nikkeibp.co.jp/article/COLUMN/20070205/260649/
private void testDrawAnti(Graphics2D g) {
String text = "Limousine";
// HRGB
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);
g.drawString("HRGB:" + text, 10, 140);
// HBGR
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HBGR);
g.drawString("HBGR:" + text, 10, 180);
// VRGB
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_VRGB);
g.drawString("VRGB:" + text, 10, 220);
// VBGR
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_VBGR);
g.drawString("VBGR:" + text, 10, 260);
}
指定のバイト長さになるようにスペースを詰める†
* @param s 対象の文字列
* @param length つめた結果の長さ(バイト長)
* @param leftPad trueなら左に詰める(文字は右詰になる)
* @return 詰めた文字列
* @throws UnsupportedEncodingException
*/
public static String padSpaceHankaku(String s, int length, booleanleftPad)
throwsUnsupportedEncodingException{
if(isEmpty(s)){
return repeatChar(' ', length);
}
else {
//シフトJISでバイトにしたときの長さを得て、足りない分を補う
byte[] bytes = s.getBytes("SJIS");
int spaceLen = length - bytes.length;
if(spaceLen <= 0)
return s;
else {
if(leftPad)
return repeatChar(' ',spaceLen) + s;
else
return s + repeatChar(' ',spaceLen);
}
}
}
バイト列の16進文字列化†
private String toHex(byte buffer[]) {
StringBuffer sb = new StringBuffer(buffer.length * 2);
for (int i = 0; i < buffer.length; i++) {
sb.append(Character.forDigit((buffer[i] & 0xf0) >> 4, 16));
sb.append(Character.forDigit(buffer[i] & 0x0f, 16));
}
return sb.toString();
}
jar内のクラスファイルの一覧を得るバッチファイル†
前ゼロつける†
- 文字列に前ゼロ:素朴なやり方
private String padLeadingZero(String value, int width) {
String wrkValue = value;
if(wrkValue != null){
if(wrkValue.length() < width) {
StringBuffer sb = new StringBuffer();
int zeroLen = width - wrkValue.length();
for( int i = 0; i < zeroLen ; i++) {
sb.append("0");
}
wrkValue = sb.append(wrkValue).toString();
}
}
return wrkValue;
}
- 左側にn桁のゼロ文字列をつけた上で右n桁のsubstringを使う方法もある
プロパティファイル読み込み†
スタンドアロンアプリで二重起動防止†
ImageI/O関連†
Graphics2D+ImageI/Oを使って画像に別の画像を挿入したファイルを作成する†
- 参考:http://www.javadrive.jp/java2d/bufferedImage/index2.html
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.awt.*;
import java.awt.geom.*;
import javax.imageio.*;
import javax.imageio.stream.ImageOutputStream;
static void outByImageIO() throws Exception{
// イメージの作成
// BufferedImage im = new BufferedImage(600,800,
// BufferedImage.TYPE_INT_RGB);
BufferedImage im = ImageIO.read(new File("sample.png")); //挿入される画像
BufferedImage im2 = ImageIO.read(new File("test2.jpg")); //挿入する画像
Graphics2D g = im.createGraphics();
g.drawImage(im2, 20,10, null);
g.dispose();
// Open output file.
OutputStream out = new FileOutputStream("test.jpg");
ImageOutputStream ios =
ImageIO.createImageOutputStream(out);
ImageWriter iw = (ImageWriter)ImageIO.
getImageWritersByFormatName("jpeg").next();
iw.setOutput(ios);
iw.write(im);
// Close output file.
out.close();
}
JNDIのlookupをだましてとりあえず動かす†
public class DummyNamingContext implements InitialContextFactoryBuilder, InitialContextFactory, Context {
public static DummyNamingContext setup() throws Exception {
if (!NamingManager.hasInitialContextFactoryBuilder()) {
final DummyNamingContext instance = new DummyNamingContext();
NamingManager.setInitialContextFactoryBuilder(instance);
return instance;
}
final Context con = NamingManager.getInitialContext(null);
if (con instanceof DummyNamingContext) {
return (DummyNamingContext) con;
}
throw new IllegalStateException("No DummyNamingContext");
}
private final Map<Name, Object> nameMap;
private final Map<String, Object> strMap;
@Override
public void bind(final String name, final Object obj) throws NamingException {
this.strMap.put(name, obj);
}
@Override
public Object lookup(final String name) throws NamingException {
return this.strMap.get(name)
}
...
}
- JNDIとはJava Naming and Directory Interfaceの頭文字を取ったもので、Javaから
ネーミング・サービス
ディレクトリー・サービス
を扱うためのインターフェイスを規定した仕様です。現在の最新バージョンはJNDI 1.2で、最新のWebSphere Application Server V5.1で採用しているJ2SE 1.4でもこのバージョンがサポートされています。
- 「インターフェイス」ですので、JNDIではネーミング・サービスやディレクトリー・サービスそのものは提供しません。あくまでも、他の実装で提供されるサービスをJavaから利用するためのしくみがJNDIです。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
...
public boolean isHogeNumFormat(String arg) {
String regexp = <正規表現の文字列>;
Pattern pat = Pattern.compile(regexp);
return pat.matcher(arg).matches();
}