starzware

ITスキル

Java

TIPS
ImageIOでBufferedImageを扱う

//読み込み
BufferedImage image = ImageIO.read(file);
//書き込み
ImageIO.write(image, "jpg", file);
Listから配列にする

//List#toArray()を使う
String[] b = list.toArray(new String[0]);
配列からListにする

//Arrays#asList()を使う
List list = Arrays.asList(a);
List list = Arrays.asList(new String[]{"a","b"});
Stringで文字が含まれるを確認する

//indexOfを使う
if("abcde".indexOf("bc") != -1) //あり
//containsを使う
if("abcde".contains("bc")) //あり
#containsは内部的にindexOfを使っているので分かりやすさからcontainsの方が良いかと。
Listの項目を結合して文字列にする

List list = ...
String joinText = String.join(",", list); // xxx,xxx,xxxとなる
Listなどで空をisEmptyで確認する

List<String> list = new ArrayList<>();
if(list.size() == 0) //これでも空リストだけど
if(list.isEmpty()) //こちらの方がわかりやすくないですか
(JSoup)使い方

Document doc = JSoup.parse(HTML);
Elements elements = doc.select(“table”); //1個しかなくても配列になる
Element el = elements.get(0);
el.text();
(JSoup)Element#textと#ownTextの違い

Element#text     配下のタグの全てのテキストを取得する
Element#ownText  配下があっても自身のテキストのみを取得する
経過時間を計算して表示する

//System.currentTimeMillis()で現在の時間を取得する
//Apache-CommonsのDurationFormatUtils.formatPeriod()を使う
long startTime = System.currentTimeMillis();
Thread.sleep(1000);
long endTime = System.currentTimeMillis();
String time = DurationFormatUtils.formatPeriod(startTime, endTime, “HH:mm:ss.SSS”);
(Apache-Commons)FTPでファイル転送したい

Apache-CommonsのFTPClientクラスを使う
org.apache.commons.net.ftp.FTPClient
(Class)文字列でクラスをロードしてインスタンスを作成する

Class clazz = Class.forName(“MyClass”);
MyClass myclass = (MyClass) clazz.newInstance();
外部プログラム起動

Runtime rt = Runtime.getRuntime();
rt.exec("cmd /c dir");
[File]Exceptionが発生しないメソッド

java.io.File
#delete
#mkdir
$mkdirs
#renameTo
#setLastModified
#setReadOnly
byte[]をInputStream

byte[] data = ...
InputStream in = new ByteArrayInputStream(data);
BigDecimalの初期化

//BigDecimalを0で初期化する場合、インスタンスで初期化しない
//BigDecimalはイミュータブル(変更不可)なので同じ値は同じ参照先になり
//メモリ節約になります
BigDecimal b = new BigDecimal(0); //×
BigDecimal b = BigDecimal.valueOf(0); //△ ベター
BigDecimal b = BigDecimal.ZERO; //ゼロならベスト
@Override

@Overrideアノテーションをつけると、明示的にオーバーライドしていること明確になり
スーパークラスに該当するメソッドがない(=オーバーライドでない)場合はコンパイルエラーになります。
予約語
private public protected class try
catch finally if else for
while extends implements import package
interface abstract void int boolean
float double char new null
static return break short long
throw throws case do final
goto instanceof true false default
continue switch for
if

if(判定){
}else if(判定){
}else{
}
for

for(int idx = 0 ; idx < 5 ; idx++){
  if(idx == 4) break;
  if(idx == 2) continue;
}
for-each

String[] cols = "1,2,3,4,5".split(",");
for(String col : cols){
}
try

try{
}catch(Exception ex){
}finally{
}
テキストファイルを一気読み

Path path = Paths.get("textfile");
String text = java.nio.Files.readString(path, Charset.forName("UTF-8"));
バイナリファイルを一気読み

Path path = Paths.get("file");
byte[] data = java.nio.Files.readAllBytes(path);
base64エンコード

Path path = Paths.get("file");
byte[] data = java.nio.Files.readAllBytes(path);
String encoded = java.util.Base64.getEncoder().encodeToString(data);
try-resources

try(InputStream in = new FileInputStream("ファイル")){
  while((byte b = in.read()) != null){
  }//while
}catch(IOException ex){
}
//inのclose処理が自動で行なわれる
//AutoCloseインターフェイスが実装されていないとダメ
拡張for

List<String> list = new ArrayList<>(Arrays.asList(new String[]{"a","b","c"}));
-- こっちよりも
for(Iterator<String> ite=list.iterator(); ite.hasNext(); ){
  System.out.println(ite.next());
}
-- こっちを使いましょう
for(String str : list){
  System.out.println(s);
}
[Eclipse]ファイルとエクスプローラと同期

開いているファイルをエクスプローラで表示(ツリー展開)するには
エクスプローラの上部の[←→]を選択状態にする
HashMapのコピー

HashMap copyto = new HashMap<>(copyfrom);
HashMapの操作

Map map = new HashMap();
// キーの有無
if (map.containsKey(key)) {}
// ループ
for (key : map.KeySet()) {}
Path結合

Path path = Paths.get("C:","a","b","c"); //C:/a/b/c
pathで存在チェック

if(Files.exists(path)){
  //あり
}
pathでフォルダ作成

Files.createDirectories(path);
pathでファイルコピー

Files.copy(path1, path2);
String->BigDecimal

BigDecimal bigdecimal = new BigDecimal("123.45");
String#replaceAllで除外

String text = ...;
// 改行(¥r¥n/¥r/¥n)、タブ(¥t)、円記号(¥)を除去する
text = text.replaceAll("¥¥r¥¥n|¥¥r|¥¥n|¥¥t|¥¥¥¥", "");
OpenCSV

//読み込み
CSVParser parser = new CSVParserBuilder().withSeparator(',').withQuoteChar('"').build();
InputStreamReader isreader = new InputStreamReader(new FileInputStream(filepath), "UTF-8");
CSVReader reader = new CSVReaderBuilder(isreader).withCSVParser(parser).build();
String[] record = null;
while ((record = reader.readNext()) != null) {
  System.out.println(record[0] + "," + record[1]);
}
//書き込み
CSVParser parser = new CSVParserBuilder().withSeparator(',').withQuoteChar('"').build();
OutputStreamWriter osw = new OutputStreamReader(new FileOutputStream(filepath), "UTF-8");
ICSVWriter writer = new CSVWriterBuilder(osw).withParser(parser).withLineEnd("¥r¥n").build();
for(String[] line : lines) {
  writer.writeNext(line);
}
writer.flush();
writer.close();
[POI]色の名前
BLACK
WHITE
RED
BRIGHT_GREEN
BLUE
YELLOW
PINK
TURQUOISE
DARK_RED
GREEN
DARK_BLUE
DARK_YELLOW
VIOLET
TEAL
GREY_25_PERCENT
GREY_50_PERCENT
CORNFLOWER_BLUE
MAROON
LEMON_CHIFFON
ORCHID
CORAL
ROYAL_BLUE
LIGHT_CORNFLOWER_BLUE
SKY_BLUE
LIGHT_TURQUOISE
LIGHT_GREEN
LIGHT_YELLOW
PALE_BLUE
ROSE
LAVENDER
TAN
LIGHT_BLUE
AQUA
LIME
GOLD
LIGHT_ORANGE
ORANGE
BLUE_GREY
GRAY_40_PERCENT
DARK_TEAL
SEA_GREEN
DARK_GREEN
OLIVE_GREEN
BROWN
PLUM
INDIGO
GREY_80_PERCENT
AUTOMATIC
ファイル内容を簡単に読み込む

Path path = Paths.get("ファイルパス");
byte[] data = Files.readAllBytes(path);
[文字列]format

// String.format
String.format("%3$d:%1$d:%2$d%n",11,22,33); // 33:11:22
Date date = new Date();
String str = String.format("%1$tY/%1$tm/%1$td%n", date.getTime());
色々contains

String target_str = "a";
// String[] / List
if (Arrays.asList(new String[]{"a","b","c"}).contains(target_str)) xxxx
// String
if ("abcdef".contains(target_str)) xxxx
[Apche PDFBox]

・セキュリティ
 AccessPermissionクラス
 AccessPermission ap = new AccessPermission();
 ap.setCanPrint(false); // 印刷可否
 doc.protect(ap); // セキュリティを反映
・PDF読み込み
 PDFDocument#load(PDF);
・画像化
 PDFRenderer
  #renderImageWithDPI();
・PDF結合
 PDFMergerUtility
  #addSource()
  #setDestinationFileName()
  #mergeDocuments()