Eclipseのプロジェクト新規作成部分
昨日はプロジェクトに設置したファイルから、プロジェクトフォルダにファイルを作るところまで作りました。Ethnaのプロジェクトの場合390個ぐらいのファイルがあったので、それを全部列挙するのか〜とか考えていました。
他のプラグインだとどうしているのかあとで調べて、とりあえずPHPとかでファイルの一覧から390行のJavaコードでも作成しようと無謀なことを考えていました(笑)
結局jarファイル使えばファイル一覧すぐに取得できるんじゃないかって思って、jarファイルを開いて中身を作るコードを作ってみました。
ファイルの読み込みと新規プロジェクトに追加
private void addJarFileToProject(IContainer container, String filename, IProgressMonitor monitor) throws CoreException { // リソースからJarファイルを取り出す InputStream resourceStream = this.getClass().getResourceAsStream( "templates/" + filename); JarInputStream jar; try { // Jar用のInputStream作成 jar = new JarInputStream(resourceStream); while (true) { // ファイルエントリ取得 ZipEntry entry = jar.getNextEntry(); if (entry == null) { // nullの場合完了 break; } // フォルダとファイルで処理を変える if (entry.isDirectory()) { // ディレクトリ IFolder imageFolder = container.getFolder(new Path(entry .getName())); if (!imageFolder.exists()) { // フォルダが無い場合のみ作成 imageFolder.create(true, true, monitor); } } else { // ファイル final IFile file = container.getFile(new Path(entry .getName())); // バイナリ データを読み込みます。 ByteArrayOutputStream out = new ByteArrayOutputStream(); while (true) { byte[] buffer = new byte[1024]; int len = jar.read(buffer); if (len <= 0) { break; } out.write(buffer, 0, len); } byte[] entryData = out.toByteArray(); // バイナリをインプットストリームに変換 InputStream in = new ByteArrayInputStream(entryData); // ファイルの存在チェック if (file.exists()) { // すでにあるので上書き file.setContents(in, true, true, monitor); } else { // 新規作成 file.create(in, true, monitor); } } } } catch (IOException e) { e.printStackTrace(); } }
この辺のIFileとかの資料があまりないんですよね。PHPとかと比べてJavaはインターネット上で検索してもあまり見つからないのが趣味より業務で組んでいる人が多いってのと関係あるかもしれませんね。
InputStream resourceStream = this.getClass().getResourceAsStream( "templates/" + filename);
ここの部分でリソースファイルって何があるか検索できないんですよね。たぶんpath情報をどこかから取ってきて、自分で検索すればいいのかな?
今回はあらかじめファイルがわかっているのとEclipseのプロジェクトに大量のファイルを登録するのも嫌なんでJarファイルで行きます!
たぶん、標準のEthna本体と追加ライブラリのJarファイル群になるかな。