- 投稿日:2020-04-06T22:02:15+09:00
【Java】カレントディレクトリの取得方法
きっかけ
Javaで同階層のファイルを開こうと相対パスを与えたのだが開いてくれなかった
そこで絶対パスを与えてやろうと検索してみたら記事が少なかったので覚書簡単
あまりにも簡単だから誰も書かないのか
常識の範囲だから書かないのか
わからないけどとっても簡単でしたそれがこちら
Dir.javaimport java.io.File; class Dir { public static void main(String[] args) { String path = new File(".").getAbsoluteFile().getParent(); System.out.println(path); // 例:C:\Users\xxxxx\Documents\java } }もうひとつ
Dir.javaclass Dir { public static void main(String[] args) { String path = System.getProperty("user.dir"); System.out.println(path); // 例:C:\Users\xxxxx\Documents\java } }おまけ
Dir.javaimport java.io.File; public class Dir { public static void main(String[] args) { String path = new File(".").getAbsolutePath(); System.out.println(path); // 例:C:\Users\xxxxx\Documents\java\. } }
.
のごみが付きますが置換でやっつ…けられませんでした
ユーザー名などにピリオド入ってたらいっかんの終わりです。感謝
散々探してやっとたどり着いたページがこちらです
【Java】カレントディレクトリを取得する
- 投稿日:2020-04-06T15:01:20+09:00
stack の pop() と peek() の違い
java.util.Stack の pop() と peek() 動作確認メモ
挙動確認に関するブログ等が無かったため、メモ。
API 上で確認出来ることを以下に。
public E pop()
スタックの先頭のオブジェクトを削除し、そのオブジェクトを関数の値として返します
戻り値:スタックの先頭にあるオブジェクト(Vectorオブジェクトの最後の項目)。
例外:EmptyStackException - このスタックが空の場合
(https://docs.oracle.com/javase/jp/8/docs/api/java/util/Stack.html#pop--)public E peek()
スタックの先頭にあるオブジェクトを取り出します。このときオブジェクトはスタックから削除されません。
戻り値:スタックの先頭にあるオブジェクト(Vectorオブジェクトの最後の項目)。
例外:EmptyStackException - このスタックが空の場合
(https://docs.oracle.com/javase/jp/8/docs/api/java/util/Stack.html#peek--)peekの場合.javapublic static void main(String[] args) { try { Stack<String> stack = new Stack(); stack.push("Good Morning!"); stack.push("Hello!"); stack.peek(); stack.stream().forEach(System.out::println); // Good Morning! // Hello! } catch (EmptyStackException e) { System.out.println("stack が空です"); } }popの場合.javapublic static void main(String[] args) { try { Stack<String> stack = new Stack(); stack.push("Good Morning!"); stack.push("Hello!"); stack.pop(); stack.stream().forEach(System.out::println); // Good Morning! } catch (EmptyStackException e) { System.out.println("stack が空です"); } }pop の場合は stack から取り出され、 peek は stack から取り出されません。
peek の API を見ると戻り値を返しますので、 値を検証しながら pop することが可能です。検証しながらpopする.javapublic static void main(String[] args) { try { Stack<String> stack = new Stack(); stack.push("Good Morning!"); stack.push("Hello!"); if (stack.peek().equals("Hello!")) { stack.pop(); } System.out.println(stack.peek()); // Good Morning! } catch (EmptyStackException e) { System.out.println("stack が空です"); } }
- 投稿日:2020-04-06T14:26:00+09:00
オブジェクト指向(Java)基本
- 投稿日:2020-04-06T11:22:16+09:00
CUIとGUIの違い
- 投稿日:2020-04-06T11:11:53+09:00
javaが動く手順について
- 投稿日:2020-04-06T01:00:38+09:00
[Logback]ローテーション時に不要ファイルが消えない時の対処方法
Logbackのローテーション設定の妥当性を検証していた時に、不要ファイル(=保存切れとなったアーカイブファイル)が消えなくて「なぜだ〜」となった時に調べた時のメモ。
NOTE:
検証時は、デバッグログを1つだけ出力するmainメソッドを作って、システム日付をずれして実行していました。
バージョン
- Logback 1.2.3
なぜ不要ファイルが消えなかったのか!?
細かい条件は調べていませんが、実行時間が短命なスタンドアロンアプリ(=ログ出力後にすぐにプロセスが終了するようなアプリ)の場合、ログファイルのローテーション後に行われるはずの不要ファイル(=保存切れとなったアーカイブファイル)削除処理が行われる前のJVMが終了してしまうことがあるようです。
どうすればよい?
アプリ起動時に不要ファイル(=保存切れとなったアーカイブファイル)を消す処理を呼び出すためのオプションを有効化しておくことで、次回の実行タイミングで不要なファイルを削除することができます。
起動時に不要ファイルを削除する処理を実行する際の設定例<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>/var/log/app-%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>7</maxHistory> <cleanHistoryOnStart>true</cleanHistoryOnStart> <!-- ★★★ ここを追加 ★★★ --> </rollingPolicy> <encoder> <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> <charset>UTF-8</charset> </encoder> </appender>NOTE:
Webアプリケーションなどの常駐型のアプリケーションの場合は、よほどのことがない限りはローテーションタイミングで不要ファイルも削除されます(=切り替え時にプロセスが終了する可能性が非常に低いため)。仮に運悪く削除されないことがあっても、次のローテーションの機会で削除されるので上記設定がなくても問題になることはないと思われます。
まとめ
おそらく・・・商用サービスで動くようなアプリでは
cleanHistoryOnStart
を指定しなくてもほとんど大丈夫でしょう。瞬殺で終わるようなバッチアプリ!?(瞬殺で終わるならバッチにしなくてええやん・・・という話はありそうだが・・)がある場合は、念のためにこのオプションを指定しておくとよいかもしれません。
あと・・・私のようにローテーションの動作確認する時はこのオプション入れておかないと「何故だ〜」と無駄な時間を過ごすことになるかもしれません。