→Java関連
→Javaのリフレクション
→Java文法系Tips
→Eclipse関連
→JavaのWebアプリ開発
Tips集Webサイト†
Java並行処理†
クラスロード時に実行されるコード†
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.");
}
}
JavaのSerializableを実際にアプリケーションを動かしながら理解する†
util.Objects†
日付/時刻処理いろいろ†
Runtime#addShutdownHookで JVM 終了時に処理を実行する†
Velocity†
マルチスレッド†
強制ガベージコレクション†
- System.gc() もしくは Runtime.getRuntime().gc()
テキストファイルの読み込み†
イメージを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);
}
BigDecimalの丸め方†
指定のバイト長さになるようにスペースを詰める†
* @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を使う方法もある
ファイル一覧取得†
Java のスタンドアロンプログラムで終了コードを設定するには†
System.exit(-1);
PDFを生成する†
XMLに対応したProperties†
プロパティファイル読み込み†
スタンドアロンアプリで二重起動防止†
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();
}
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();
}
シリアルバージョンUIDの生成†
実行時の対応ソース行取得†
int line = (new Throwable().getStackTrace()[0]).getLineNumber();
Javaオブジェクトのハッシュコードのルール†
- The hashCode( ) method is supposed to return an int that should uniquely identify different objects.
- A properly written hashCode( ) method will follow these rules:
- It is repeatable: hashCode(x) must return the same int when called repeatedly, unless set methods have been called.
- It is consistent with equality: if x.equals(y), then x.hashCode( ) must == y.hashCode( ).
- If !x.equals(y), it is not required that x.hashCode( ) != y.hashCode( ), but doing so may improve performance of hash tables; i.e., hashes may call hashCode( ) before equals( ).
- The default hashCode( ) on Sun's JDK returns a machine address, which conforms to Rule 1. Conformance to Rules 2 and 3 depends, in part, upon your equals( ) method. Here is a program that prints the hashcodes of a small handful of objects:
コンパイラの警告抑制†
バイト配列から文字列への変換†
result = new String(bytes, offset, length, charsetName);
- charsetName は "shift-jis"とか
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です。
Javaのソース解析/AST(Abstract Syntax Tree)†
その他†