プログラマメモ2 - programmer no memo2

パス(java.nio.file.Path)の結合 2021/04/04

 java7です。パス(java.nio.file.Path)の結合です。

この10年勉強してこなかったつけがどーんと押し寄せている感じがしてます。 

モチベーション

ディレクトリを表現しているパスがあり、ファイル名がわかっていて、それらをひとつのパスで表現したいわけです。 

Fileでしたたら、ペアレントのFileと結合という感じにやっていたなーというところですが、

どうするのか

resolveというメソッドを使うのがよいようです。


参考

https://docs.oracle.com/javase/jp/8/docs/api/java/nio/file/Path.html

https://docs.oracle.com/cd/E26537_01/tutorial/essential/io/pathOps.html#resolve

ディレクトリ監視 2014/03/16

java7です。ためしてみたいと思ってて、試せてなかったディレクトリ監視です。

参考

試して環境は、mac osxの環境です。

簡単にできる!!

package java7; import java.io.File; import java.io.IOException; import java.net.URISyntaxException; import java.net.URL; import java.nio.file.FileSystem; import java.nio.file.Path; import java.nio.file.StandardWatchEventKinds; import java.nio.file.WatchEvent; import java.nio.file.WatchKey; import java.nio.file.WatchService; public class TestFileWatch { public static void main(String[] args) throws URISyntaxException, IOException, InterruptedException { a(); } static void a() throws URISyntaxException, IOException, InterruptedException { URL url = TestFileWatch.class.getResource("doc-files/"); Path path = new File(url.toURI()).toPath(); FileSystem fileSystem = path.getFileSystem(); WatchService watcher = fileSystem.newWatchService(); WatchKey watchKey = path.register(watcher, new WatchEvent.Kind[] { StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.OVERFLOW }); while (true) { final WatchKey key = watcher.take(); for (WatchEvent<?> watchEvent : key.pollEvents()) { final WatchEvent.Kind<?> kind = watchEvent.kind(); if (kind == StandardWatchEventKinds.OVERFLOW) { continue; } final WatchEvent<Path> watchEventPath = (WatchEvent<Path>) watchEvent; final Path entry = watchEventPath.context(); System.out.println(kind + " ====>[" + entry + "]"); } key.reset(); if (!key.isValid()) { break; } } } }

java7でのwebstart実行のためのマニフェストとjnlpの記述について 2014/02/24

java7です。webstartです。

いろいろセキュリティ要件をクリアしないと配布できなくなっています。

いまのところAntでjarを作成しているのですが、どうもマニフェストに書きこみが必要なようです。
なくても起動はできたのですが、とはいっても、動かしたい端末での設定はしました。
マニフェストに必要な文言がないと、コンソール上でワーニングはでます。

 マニフェストに書き込むのに使ったのは以下の命令
 参考
             <manifest>
                <attribute name="Permissions" value="all-permissions" />
                <attribute name="Codebase" value="http://deiji.jp/tools/t/t023/" />
                <attribute name="Application-Name" value="まとめて変換1号" />
            </manifest>
 all-permissionsにしたい理由は、ファイルをドロップして、読み取る機能を実現したいからです。
 これでjarにマニフェストを追加して、あとjnlpに
追加
<security>
   <all-permissions/>
</security>

 JNLPにこれを書かないと最後ではじかれます。

 証明書はオレオレで行っています。

 とりあえず、これで動かしてファイルをドロップして読み込めたのまでは確認できました。



プログラムで、いまさらながらマニュフェストを読み込み 2014/02/09

javaです。
いろいろあってマニュフェストです。

編集するツール群がなければ、自力でごにょごにょしないといけないので、念のため準備はしておこうと思うのでした。

  java.util.jar.Manifestがあるので読みこんで、追加したい項目を追加したの書き出すという流れになるかなと思います。

バージョンjava7です。

実行結果はこんな感じ
[Implementation-Title=xxxx, Manifest-Version=1.0, aaaa=OK]
[Implementation-Title=ooo, Manifest-Version=1.1, aaaa=OK]

package mf; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.util.jar.Attributes; import java.util.jar.Manifest; public class TestReadMf { public static void main(String[] args) throws IOException { a(); } static void a() throws IOException { String smf = "/doc-files/MANIFEST2.MF"; URL url = TestReadMf.class.getResource(smf); System.out.println(url); Manifest mf = new Manifest(); // java7 この書き方でいいのか自信ないけど // 読み込み try (InputStream is = url.openStream()) { mf.read(is); System.out.println(mf.getMainAttributes().entrySet()); } // 書き込み try (OutputStream outputStream = new FileOutputStream(url.getFile())) { Attributes a = mf.getMainAttributes(); a.put(Attributes.Name.MANIFEST_VERSION, "1.1"); a.put(Attributes.Name.IMPLEMENTATION_TITLE, "ooo"); a.put(new Attributes.Name("aaaa"), "OK"); mf.write(outputStream); System.out.println(mf.getMainAttributes().entrySet()); } } }