ここから質問投稿すると、最大4000ポイント当たる!!!! >>

macでのファイル場所指定
javaで指定したファイルやディレクトリを操作したいのですが、上手くいきません。

ディレクトリの場所をプロパティで確認したところ、
/Users/herobushi/Documents/workspace/test1/
にあることが分かったので

String inputdirectory ="/Users/herobushi/Documents/workspace/test1/";

としたのですが、ディレクトリが見つからない、というエラーが出てしまします。
java上で指定する場合何か別の表記方法があるのでしょうか?

回答をよろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

質問者がディレクトリに対する処理をどんなコードで行ったかの情報が無いのであまり助言はできない。


手元のMacでは、

String directory = "/Users/hoge/Documents/";
System.out.println(new java.io.File(directory).exists());

でtrueが表示されるので存在していることは"/Users/hoge/Documents/"のような表記をFileクラスに与えて確認できる。
ただし、hogeはユーザ名のプレースホルダで、こちらではDocuments下に自分ではディレクトリを作成していないのでここまでの表記(システムが作ったドットで始まるディレクトリは存在するが)。

どういったコードを書いてどんなエラーが出たのかの詳細があればもう少し回答がつくのでは?
少なくとも質問のような表記でディレクトリが表せていないことはないので、
存在していれば「見つからない」というエラーは出ないと思う。

この回答への補足

回答ありがとうございます。
Windowsで作成したプロジェクトをMacに持ってきてそのまま使おうとしたのですが、

String directory = "/Users/hoge/Documents/";
System.out.println(new java.io.File(directory).exists());

を個別のクラスtestを用意して実行したら、

NoClassDefFoundError: test

というエラーが出てしまいました。
どうやら違うところで問題があるようです。

調べなおして分からなかったらまた質問させていただきます。
よろしくお願いします。

補足日時:2010/07/31 15:14
    • good
    • 0

ごめんごめん よく確認しないままだったよ


確かに /Users は有るみたいだね。

でもこれ、OSの起動diskにある階層を / にしてるから もしかしたら正規の経路にしたら通ったりしてね

/Users → /Volumes/Macintosh HD/Users (空白が含まれてる事に注意)

でもまぁ ログオンユーザなら ~ で取れると思うよ。
言ってる意味がわからないなら `ls ~`

ただ、javaの表記でチルダた使えるのかというのはまた別の話かも・・・
    • good
    • 0

ターミナルを起動して



ls /

ってやってごらん。Usersなんてディレクトリ、無い筈だから。
そういうのは「~」を使うんじゃないのかな。

この回答への補足

回答ありがとうございます。
ls / を実行したところ、
ApplicationやらLibraryなどと一緒にUsersというのがありますね。。
「~」を使う場合どういう表記方法になるのでしょうか?

補足日時:2010/07/31 13:07
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QMacのファイルパス

Javaで画像ビュワを作成しています。
Windowsで作成しWindows上では動作可能となっている
物をMac OS 9上でも動かしたいのですが、いかんせん
Macの知識が全く無く困っています(汗)

このソフトは、USBで接続されたデジカメから画像データ
を取得し、表示するといった物なのですが、Windowsなら

File f=new File("F:\\***\\***");
File[] ph=f.listFiles(new FileFilter(){
  public boolean accept(File pathName){
    String fName=pathName.getName().toLowerCase();
    if(fName.endWith(".jpg")||fName.endWith(".jepg"){
      return true;
    }
    else{
      return false;
    }
  }
});

でファイルの取得可能なのですが、これをMacで実現
する為のパスの指定方法が分かりません。
USBをMacでつなぐと、デスクトップには「名称未設定」
というフォルダができ、ディレクトリ構成はWindowsの
F:以下と同様になっています。

*「F:\\***\***」としている事からもおわかりだと
思いますが、今回のアプリケーションは「その環境」
に完全に依存した形で作っております。
ですので、環境に依存した形で構いません。

宜しくお願い致します。

Javaで画像ビュワを作成しています。
Windowsで作成しWindows上では動作可能となっている
物をMac OS 9上でも動かしたいのですが、いかんせん
Macの知識が全く無く困っています(汗)

このソフトは、USBで接続されたデジカメから画像データ
を取得し、表示するといった物なのですが、Windowsなら

File f=new File("F:\\***\\***");
File[] ph=f.listFiles(new FileFilter(){
  public boolean accept(File pathName){
    String fName=pathName.getName().toLowerCase();
    if(fName.e...続きを読む

Aベストアンサー

Macでのパス指定記号は原則として":"か"/"です。(Javaがどちらかは未確認)
絶対パスの指定はボリューム名を起点とし、"Macintosh HD:foo:bar"(URLエンコード不要)、あるいは"file:///Macintosh%20HD/foo/bar"(URLエンコード必要?)などとなるはずです。
まずは試しに"名称未設定:foo:bar"のように指定して見てください。

# 自信がないので回答ではなくアドバイス...(^^A;

参考URL:http://www.google.com/search?hl=ja&inlang=ja&ie=Shift_JIS&q=mac+%90%E2%91%CE%83p%83X%81@%22Macintosh%2520HD%22

Qシンボルが見つかりませんというエラーが理解できません。

以下のようなじゃんけんゲームのプログラムを書いたのですが、「シンボルが見つかりません。」というエラーが表示されるのですが、エラーの意味が理解できず、解決できません。どこが間違っているのか教えていただけませんか。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class janken extends Applet
implements Runnable, ActionListener {
private static final int EXTERNAL_BUFFER_SIZE = 128000;

Image image[] = new Image[3];
Thread t;
int index1 = 0;
int index2 = 0;
String msg = "";
String msg1 = "";

boolean state = false;
Button b1 = new Button("ぐー");
Button b2 = new Button("ちょき");
Button b3 = new Button("ぱー");

public void init(){
for(int i = 0; i<=2; i++){
img[i] = getImage(getDocumentBase(),"hanabi" + (i+1) + ".JPG");
}
add(b1);
add(b2);
add(b3);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
msg1 = "結果は・・";

}

public void paint(Graphics g){
g.drawImage(img[index1],350,30,this);
g.drawImage(img[index2],695,30,this);
g.drawString("コンピューター",420,300);
g.drawString("あなた",800,300);
g.drawString(msg,630,320);
g.drawString(msg1,550,320);
}

public void start(){
state = true;
t = new Thread(this);
t.start();

}

public void run(){
while(state){
index1++;
if(index1 == 3){
index1 = 0;
}
index2++;
if(index2 == 3){
index2 = 0;
}
repaint();
try {
Thread.sleep(60);
}catch(InterruptedException e) { }
}
}

public void actionPerformed(ActionEvent e){
if(state == false) {
start();
return;

}
state = false;
if(e.getSource() == b1) {
msg = "ぐー";
index2 = 0;
}

else if(e.getSource() == b2){
msg = "ちょき";
index2 = 1;
}

else if(e.getSource() == b3){
msg = "ぱー";
index2 = 2;
}
check();
repaint();
}

public void check() {
if(index1 == index2) msg ="あいこ";


else if (index1 == 0) {
if(index2 == 2) msg="あなたの勝ち";
else msg ="あなたの負け";
}

else if(index1 == 1) {
if(index2 == 0) msg="あなたの勝ち";
else msg="あなたの負け";
}

else if(index1 == 2) {
if(index2 == 1) msg="あなたの勝ち";
else msg="あなたの負け";
}

}
}

以下のようなじゃんけんゲームのプログラムを書いたのですが、「シンボルが見つかりません。」というエラーが表示されるのですが、エラーの意味が理解できず、解決できません。どこが間違っているのか教えていただけませんか。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class janken extends Applet
implements Runnable, ActionListener {
private static final int EXTERNAL_BUFFER_SIZE = 128000;

Image image[] = new Imag...続きを読む

Aベストアンサー

「シンボルを見つけられません。」というエラーの下に何か表示がありませんでしたか?そこにヒントがあると考えられます。
シンボルを見つけられませんといエラーが表示される主な理由は4つあります。
(1)クラス、メソッド、変数などの綴りミスや定義していない変数を使用している可能性がある。
(2)コンストラクタを呼び出すときに、newを忘れている可能性がある。(3)公開されていないメンバーを呼び出している可能性がある。
(4)必要なimport文を記述し忘れている可能性がある。
ここでのあなたのエラーは(1)番ではないでしょうか?上記ではimageとなっている変数がimgになっていますね。
これはエラー表示をよく見ることで意外と簡単に解決できるのです。
ゆっくり丁寧にエラー表示を見るように心がけることが大事ですよ。

QMacターミナルで実行中のプログラムを中止するには?

Macのターミナルでプログラムを走らせているとき、
実行中のプログラムを一時停止したり中断・終了させるには
どうしたらいいでしょう?

Unixだと、Control+s とか Control +c とかでできますよね。
Macだと、それではできないみたいなんです。

基本的な質問ですみませんが、どなたか教えていただけないでしょうか。

Aベストアンサー

ごく普通にControl + Cで中断できますよ。

もしかしてControlキーをcommandやcapslockと押し間違えているとかいうことはありませんか?

Qmac(osX)で、Javaはどこにインストールされている?

今Javaの参考書を買ってきたのですが、
サンプルライブラリを
「c:\ProgramFiles\Java\jdk1.6.0_01\jre\lib\ext」と
「c:\ProgramFiles\Java\jre1.6.0_01\lib\ext」に保存と書いてあります。

osXでは標準でjavaが入っていたのですが、もともとそのjavaがどこにインストールされているのかが分かりません。

macではProgramFilesというフォルダも無いので、辿りようが無いな~と困っています。
上記のフォルダがどこにあるのか、分かる方教えてください!

Aベストアンサー

Mac OS Xの場合、JDKがインストールされている場所は、/System/Library/Framework/JavaVM.framework/内になります。この中に、Classes、Home、Libraries、Resources、Versionsといったディレクトリがあり、それらにそれぞれ必要なファイル類がまとめられています。これは、WindowsなどのJDKのファイル構成とはまったく違いますので、一般のJDKの構成などを参考にしても無意味です。また、ここはSystem下にありますから、これらのディレクトリにファイルを入れたりすることは禁止されています。

ユーザがライブラリなどを追加する場合には、/Library/Java/Extensions/を利用します。これが、通常のJDKのlib/extフォルダに相当するものと考えてください。

ちなみに、これらについてはアップルの開発者向けドキュメントを読んでおくとよいでしょう。

http://developer.apple.com/jp/qa/qa2001/qa1170.html

参考URL:http://developer.apple.com/jp/qa/qa2001/qa1170.html

Mac OS Xの場合、JDKがインストールされている場所は、/System/Library/Framework/JavaVM.framework/内になります。この中に、Classes、Home、Libraries、Resources、Versionsといったディレクトリがあり、それらにそれぞれ必要なファイル類がまとめられています。これは、WindowsなどのJDKのファイル構成とはまったく違いますので、一般のJDKの構成などを参考にしても無意味です。また、ここはSystem下にありますから、これらのディレクトリにファイルを入れたりすることは禁止されています。

ユーザがライブ...続きを読む

QIOException ってどういうときに起こるのでしょうか?

IOException ってどういうときに起こるのでしょうか?

http://www.atmarkit.co.jp/fjava/rensai2/javaent12/javaent12.html
を見て勉強しています。

  catch ( IOException e) {
    System.out.println( "キーボードが故障しているのかもしれません" );
  }

と書いてあります。
ハード(キーボード)が故障しているのを Java のプログラムのレベル(ソフトウェア)で感知できるというのがよくわかりません。「

NumberFormatException の方はわかるのですが・・・

Aベストアンサー

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接続だったりするわけですけど、
InputStreamは、その入力元の情報を持っていないので、
データを読み取る際は常に
IOExceptionをキャッチするコードを書かなくてはいけません。
たとえ、絶対にIOエラーが発生しないストリームだとしても。

さらに付け加えるなら、
そもそも「標準入力=キーボード」であるとは限りません。
(一般的にはキーボードであることが多いですが。)
Javaでは、
System.setIn(InputStream)
を呼び出して、標準入力を変えてしまうことができますし、
標準入力を指定してプログラムを実行することができるOSもあります。

追伸1:
例外をキャッチしたときは、
スタックトレースをプリントすることをおすすめします。
catch (IOException e) {
e.printStackTrace();
}

追伸2:
そのプログラムでIOExceptionを発生させる最も簡単な方法は、
readLine()を呼び出す前に
標準入力(System.in)を閉じてしまうことです。
System.in.close();

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接...続きを読む

QJAVA  ArrayListからArrayListへのコピー

java で、ArrayListからArrayListへコピーはできるのでしょうか?
clone()というメソッドがありましたが、よくわからず、コピーできてないようなので伺いました。

ベーシックではできるようですが、JAVAでもできるのでしょうか?
どなたか教えていただけませんでしょうか?

Aベストアンサー

ArrayList li = new ArrayList(list);
でよいでのでは?

QEclipse

Eclipseを使い、FileReaderでテキストファイルを読みこみたいのですが、
プロジェクトフォルダの中に読み込むテキストファイルを保存して、以下のように指定しました

FileReader in = new FileReader("/workspace/Project/sam.txt");

しかし、エラーメッセージで、システムはこのパスを見つけられないと表示されました。

Projectフォルダの中には、classファイルが入っているbinフォルダと、javaファイルが入っているsrcフォルダがあるのですが、
テキストファイルをclassファイルと同じbinに保存してパスを指定しても見つけられないとエラーがでました。
srcフォルダに入れても同様のエラーです。

Eclipseでテキストファイルを読み込む場合、テキストファイルはどこに保存すればよいのでしょうか?
それともパスの指定の仕方が間違っていますでしょうか?

Aベストアンサー

フォルダの指定が間違ってます。
Eclipseで動かしたら作業フォルダはデフォルトではプロジェクトフォルダになるはずです。よってそこからの相対パスを指定してください。
もしくは絶対パスで指定してください。
分からないときはまずは絶対パスをつかいましょう。
また、目的わかりませんが、絶対パスで指定しておいたほうがたいていよい結果になります。
Eclipseとかどこに保存するのかなど、問題ではありません。

QJavaには、構造体はないんですか?

 C言語の構造体みたいなのはないんですか?

野球のデータを扱っているのですが、構造体がないのでできません。

打率の順位をソートしたいのですが、Cでは構造体でソートすれば選手名まで全部ソートできたのですが。。。

Javaでは、いちいち選手名、打率などの配列を作っているのですが、打率をソートしてから選手名と一緒に表示しようとしても打率の配列だけ、ソートしてあり選手名の配列と打率の配列があいません。

要するに、打率の配列はソートし、選手の配列はデータを入力したときのままなので、順番が違っているのです。

うまい方法を教えてください。初歩的な質問でごめんなさい。

Aベストアンサー

メンバーが public なクラスが構造体と(ほぼ)同じです。

大体こんな感じ。

// sort Object using Arrays.sort()

import java.util.Arrays;

class Batter implements Comparable {
 public double rate;
 public String name;
 Batter(double r, String n) {
  rate = r;
  name = n;
 }
 public int compareTo(Object o) {
  return (int)((rate - ((Batter)o).rate)*1000.);
 }
}

class w03 {
 public static void main(String[] args) {
  Object[] batter = {
   new Batter(0.3, "ichiro"),
   new Batter(0.1, "shinjo"),
   new Batter(0.0, "irabu")
  };

  // sort
  Arrays.sort(batter);

  // print-out to console
  for (int i=0; i < batter.length; i++) {
   Batter b = (Batter)batter[i];
   System.out.println(b.name + " " + Double.toString(b.rate));
  }
 }
}

このように java.util.Arrays の sort() メソッドを使うと、C でやってた
イメージに近くなります。

C の qsort() と違って、どんなデータでもソートできるわけではなく、対象と
なるクラスは Comparable インターフェースを実装しなくてはいけません。

メンバーが public なクラスが構造体と(ほぼ)同じです。

大体こんな感じ。

// sort Object using Arrays.sort()

import java.util.Arrays;

class Batter implements Comparable {
 public double rate;
 public String name;
 Batter(double r, String n) {
  rate = r;
  name = n;
 }
 public int compareTo(Object o) {
  return (int)((rate - ((Batter)o).rate)*1000.);
 }
}

class w03 {
 public static void main(String[] args) {
  Object[] batter = {
...続きを読む

Qinterface,extend,implementのちがい

お世話になります、

Javaを勉強しているのですが、
interface,extend,implementの使い分けがわかりません。

私の解釈としては、
(1)interfaceは、グローバル変数の定義、グローバルメソッドの定義(実装はしない)。

(2)extendは、extendクラスを親クラスとして親クラスの機能を使用できる。

(3)implementは…,implementもextendと同じような意味だと解釈しているんですが、違う点は、implementで定義してあるメソッドは、使用しなくても、実装しなければならないという点でしょうか?

とにかくこの3つのを使い分けるコツとかあれば教えてください。
よろしくお願いします。

Aベストアンサー

バラバラに理解してもしょうがないッス。

まず、
(1)interface と implements
(2)class と extends

が対応しているわけっす。

JavaはC++と違って、比較的言語仕様を「簡単」にしたので「多重継承」という
概念がないです。
多重継承っていうのは、複数のクラスを親クラスにして継承するってことですね。

たとえば、 「TextFieldクラス」と「Japaneseクラス」を多重継承すると、
「JTextFieldクラス」ができるっていうのが自然な考え方でしょう?

まぁ、例えば、日本語クラスであれば、getStringLength()メソッドなどが
あったほうが良いでしょうか。
このgetStringLength()メソッドは、2バイト文字も1バイト文字も「1文字」
と数えてくれると言う点で、まさに、日本語クラス用のメソッドだと言えるでしょう。

例えば、Java的に記述すると、、、
class Japanese {
public int getStringLength() {
  ・・・
return strlength;
 }
 ・・・
}

class TextField {
・・・
}

class JTextField extends TextField, extends Japanese {
・・・・
}

C++ではそのように実装するでしょう。
しかし、Javaにはこのような高度な機能はありません。

そこで、生まれた苦肉の策が、「interfaceとimplements」です。

interface Japanese {
public int getStringLength(); // interfaceは実装を含まない!
                 // すなわち「実装の継承」ができるわけではない。
}

class TextField {
・・・
}

class JTextField extends TextField implements Japanese {
・・・・
public int getStringLength() {
  ・・・
return strlength; //implementsの実装を「各クラスで」実装してやる必要がある。
 }
}


結局のところ、Javaでは、複数のクラスを親クラスには持ち得ないため、継承できなかったクラスは「各クラスで実装してやる必要性」があるのです。


ではどのように使うのが効果的か?

なまえのままです。「代表的なインターフェイス」にたいしてinterfaceを使うのが良いと思います。

例えば、プレイヤー系であれば、ビデオ・コンポ・ウォークマン・などにかかわらず、
interface controlpanel {
public play();
public stop();
public next();
public back();
}
というような基本的インターフェイスを「持っているべき」です。

こうすることで、それぞれのクラス宣言の際に、これらの「インターフェイスを持っているべきであり、実装されるべきである」ということを「強く暗示」することができます。
class videoplayer extends player implements controlpanel {
public play() {・・・}
public stop() {・・・}
public next() {・・・}
public back() {・・・}
}

こうすることで、同様のクラスを作成するユーザーは、
「プレイヤー系は、4つ操作が出来るコントロールパネルをインターフェイスとして持つべきなのだな!?」という暗示を受け取り、自分のクラスでもそれを模倣するでしょう。

class mp3player extends player implements controlpanel {
public play() {・・・}
public stop() {・・・}
public next() {・・・}
public back() {・・・}
}

また、これらのクラスを使用するユーザーも、「implements controlpanel」という
表記を見て、「4つの基本操作は押さえられているのだな!」という基本中の基本動作を抑えることが出来ます。

まとめると、クラスに「こういう特徴もたしてください!」「こういう特徴持ってますよ!」という一種の暗示的警告や方向性を与えることができるわけですね。

バラバラに理解してもしょうがないッス。

まず、
(1)interface と implements
(2)class と extends

が対応しているわけっす。

JavaはC++と違って、比較的言語仕様を「簡単」にしたので「多重継承」という
概念がないです。
多重継承っていうのは、複数のクラスを親クラスにして継承するってことですね。

たとえば、 「TextFieldクラス」と「Japaneseクラス」を多重継承すると、
「JTextFieldクラス」ができるっていうのが自然な考え方でしょう?

まぁ、例えば、日本語クラスであれば...続きを読む

Qjavaで大量のファイルを読み込む方法

javaプログラミングについて質問です。

例えば、a1.txt~a100.txtの100個のテキストファイルがある
として、これをループか何かを使って順番に読み込みたいのですが、
そのような方法はあるのでしょうか。

// ファイル入力ストリームを取得
BufferedReader br = new BufferedReader(new FileReader("a1.txt"));
BufferedReader br2 = new BufferedReader(new FileReader("a2.txt"));
BufferedReader br3 = new BufferedReader(new FileReader("a3.txt"));
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
BufferedReader br100 = new BufferedReader(new FileReader("a100.txt"));
という風に書くのが面倒に思っています。

宜しくお願いします。

javaプログラミングについて質問です。

例えば、a1.txt~a100.txtの100個のテキストファイルがある
として、これをループか何かを使って順番に読み込みたいのですが、
そのような方法はあるのでしょうか。

// ファイル入力ストリームを取得
BufferedReader br = new BufferedReader(new FileReader("a1.txt"));
BufferedReader br2 = new BufferedReader(new FileReader("a2.txt"));
BufferedReader br3 = new BufferedReader(new FileReader("a3.txt"));
・・・・・・・・・・・...続きを読む

Aベストアンサー

順番を無視していいのと同じディレクトリの中なら

String dirString = "C:/data";
File dir = new File(dirString);
File files[] = dir.listFiles();
for (int i = 0; i < files.length; i++) {
 if (!files[i].isDirectory()) {
  BufferedReader br = new BufferedReader(new FileReader(files[i].getName()));
  // 何かの処理
  // .....
 }
}
と、言った感じですかねぇ。


人気Q&Aランキング