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

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

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

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

Q&A

受付中

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

KATANKUN
KATANKUN

総合スコア4

Java

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

2回答

0グッド

1クリップ

303閲覧

投稿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}

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

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

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

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2023/01/08 12:50

こちらの質問が複数のユーザーから「調査したこと・試したことが記載されていない質問」という指摘を受けました。

KATANKUN

2023/01/04 01:22

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

2023/01/04 09:38

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

2023/01/05 07:18

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

回答2

1

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

総合スコア8281

dodox86😄を押しています

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

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); で不思議といけちゃったんですよね...

0

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

投稿2023/01/03 12:05

y_waiwai

総合スコア86471

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

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

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

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

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

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Java

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