質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

2回答

670閲覧

カレントディレクトリを開きたい

KATANKUN

総合スコア4

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2023/01/03 11:14

カレントディレクトリを開くプログラムを書いてみたのですが、以下のようなエラー文が出てしまいうまく動作しません。どのようにコードを変更すれば動作しますでしょうか。

エラー文(コンパイル時)
ノート:test01.javaは推奨されないAPIを使用またはオーバーライドしています。 ノート:詳細は、-Xlint:deprecationオプションを指定して再コンパイルしてください 。

java

1コード 2import java.io.IOException; 3import java.nio.file.Path; 4import java.nio.file.Paths; 5 6public class test01 7{ 8 public static void main(String[] args) 9 { 10 Path p1 = Paths.get(""); 11 Path p2 = p1.toAbsolutePath(); 12 13 try{ 14 Runtime rt = Runtime.getRuntime(); 15 rt.exec(p2.toString()); 16 }catch(IOException e){ 17 e.printStackTrace(); 18 } 19 } 20}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KATANKUN

2023/01/04 01:22

ありがとうございます。参考にさせて頂きます。
dodox86

2023/01/04 09:38

そもそもですが、「カレントディレクトリを開く」とは、どの様な挙動を求めているのでしょうか。一般的にディレクトリは実行対象ではありません。その為、Windows 系ではアクセス拒否のエラーになります。
KATANKUN

2023/01/05 07:18

言い方が悪かったです。申し訳ありません。具体的な動作として、「windowsのエクスプローラの任意のディレクトリを開く」というものがあげられます。
guest

回答2

0

dodox86さんも指摘されていますが、Runtime#execは実行するということです。
エクスプローラーで開きたいなら、エクスプローラーを実行します。
Runtime (Java Platform SE 8 )

Windowsに限定しない方法も用意されています。
Desktop (Java Platform SE 8 )

Java

1import java.awt.Desktop; 2import java.io.IOException; 3import java.nio.file.Path; 4import java.nio.file.Paths; 5 6public class Test01 { 7 public static void main(String[] args) throws IOException { 8 Path current = Paths.get("").toAbsolutePath(); 9 10 Runtime.getRuntime().exec("explorer.exe " + current); 11 12 Desktop.getDesktop().open(current.toFile()); 13 } 14}

投稿2023/01/05 10:06

TN8001

総合スコア10022

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2023/01/07 00:10

Desktop#openを使った方法は私は存じませんでした。勉強になります。 ご存じの方も多いかとは思いますが、Windowsのシェルであるexplorer.exeを使った方法の他に、コマンドプロンプト(cmd.exe)のstartコマンドやPowerShellのStart-Processコマンドレットを使う方法もありますね。補足程度の意味でコメントさせていただきます。 RunTime#exec(String[] cmdarray)での例: rt.exec(new String[] { "cmd.exe", "/c", "start", p2.toString() }); rt.exec(new String[] { "powershell.exe", "Start-Process", p2.toString() });
TN8001

2023/01/07 02:11

補足ありがとうございます。 パスにスペースが入っていると、うまく動かないんですよね... そのあたり面倒だったのでスルーしちゃいましたw cmdはこちら [Java でフォルダを開いたら start の謎仕様に行き当たった話](https://www.cresco.co.jp/blog/entry/12745/) powershellはシングルクォートで囲ったらいけました(よくわかってません^^; --- そういう意味では rt.exec(new String[]{ "explorer.exe", p2.toString() }); とすべきな気がするんですが、なぜか rt.exec("explorer.exe " + p2); で不思議といけちゃったんですよね...
guest

0

ノートってのはあくまで注釈、ってことなんで、エラーではないです。
コンパイルはきちんとできてます。そのまま実行させてみたらどうなりますか?

投稿2023/01/03 12:05

y_waiwai

総合スコア88163

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KATANKUN

2023/01/03 12:52

Error: A JNI error has occurred, please check your installation and try again Exception in thread "main" java.lang.UnsupportedClassVersionError: test01 has been compiled by a more recent version of the Java Runtime (class file version 63.0), this version of the Java Runtime only recognizes class file versions up to 52.0 at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$100(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source) このようなエラー文が出ました
KATANKUN

2023/01/04 01:10

提示して頂いたサイトの方を確認してみました。確かにjavacとjavaのバージョンが違いました。 javac -> 19.0.1 java -> 1.8.0_202
KATANKUN

2023/01/04 01:21

コンパイルのバージョンと実行のバージョンを統一し、再度実行してみましたところ、以下のようなエラーが... java.io.IOException: Cannot run program "C:\Users\20055\Documents\Project\J_Lessons\test": CreateProcess error=5, アクセスが拒否されました。 at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143) at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073) at java.base/java.lang.Runtime.exec(Runtime.java:615) at java.base/java.lang.Runtime.exec(Runtime.java:439) at java.base/java.lang.Runtime.exec(Runtime.java:322) at test01.main(test01.java:14) Caused by: java.io.IOException: CreateProcess error=5, アクセスが拒否されました。 at java.base/java.lang.ProcessImpl.create(Native Method) at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:500) at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:159) at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110) ... 5 more
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問