2016-05-10 6 views
0

は、以下の私のプログラム、であるRandomAccessFileにはなぜ0が最初の位置、8が4番目の位置ですか?ここ

public class RandomAccessDemo { 
public static void main(String[] args) { 
    double data[] = { 19.4, 10.1, 123.54, 33.0, 87.9, 74.25 }; 
    double d; 
    // open and use a random access file 
    try (RandomAccessFile raf = new RandomAccessFile("random", "rw")) { 
     // write values to the file 
     for (int i = 0; i < data.length; i++) { 
      raf.writeDouble(data[i]); 
     } 
     // now read back specific values 
     raf.seek(0);// seek to first double 
     d = raf.readDouble(); 
     System.out.println("First Values is " + d); 

     raf.seek(8);// seek to first double 
     d = raf.readDouble(); 
     System.out.println("Second Values is " + d); 

     raf.seek(8 * 3);// seek to first double 
     d = raf.readDouble(); 
     System.out.println("Fourth Values is " + d); 

     System.out.println(); 
     // Now read every other value 
     System.out.println("Here is every other value:"); 
     for (int i = 0; i < data.length; i += 2) { 
      raf.seek(8 * i);// seek to ith double 
      d = raf.readDouble(); 
      System.out.println(d + " "); 
     } 

    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
} 

0が第一の位置、8秒値と8 * 3 4番目の値を、なぜ私は不思議でしたか?これらの数字は何に対応していますか?また、 "ランダム"にデータを書き込むと、javaはrandomというファイルを作成しますか?私はテキストファイルを作成していないので、このランダムファイルはどこに保存されていますか?

+0

クラスの[javadoc](https://docs.oracle.com/javase/7/docs/api/java/io/RandomAccessFile.html)を読んで、すべてを問う必要はありませんここに。あなたがいている間、いくつかの[チュートリアル](https://docs.oracle.com/javase/tutorial/)を試してみてください。 – Kayaman

答えて

0

位置はバイト単位で測定されます。 0は最初のバイト、1は2番目のバイトなどです。倍精度はそれぞれ8バイトであるため、8倍の動作を得ています。

この文脈での単語「ランダム」は、それがランダムファイルであることを意味するものではありませんが、いつでもどこの部分にもアクセスできるファイルです(常に先頭から始まり、 )。システムの観点からは、ランダムオフセットでファイルにアクセスできます。ファイル自体はどこにでもあり、コンストラクタに渡す引数はそのパスを指定します。

+0

Randomは恐らくファイルのベストネームではありませんでしたので、RandomAccessFileのパラメータにランダムに入力すると、新しいファイルが作成されますか? – Eli

+0

ファイルは作業ディレクトリに格納されています。基本的には、プログラムを実行したときのどこにあっても。 "rw"という2番目の引数を指定すると、ファイルがまだ存在しない場合は作成されます。詳細については、docs:https://docs.oracle.com/javase/7/docs/api/java/io/RandomAccessFile.html#mode – yshavit

0

最初の質問の場合、 ランダムアクセスファイルでは、ファイルの内容に非順次またはランダムにアクセスできます。ランダムにファイルにアクセスするには、ファイルを開き、特定の場所を検索し、そのファイルを読み書きします。ここでもまた、バイト単位で測定されます.8ビットなので、0,8,8 * 2などとなります。

2番目の質問では、 "random"はファイル名の場所にする必要があります たとえば、 D:ドライブにファイルを書きたい場合は、 "D:¥random.txt"を作成し、D:ドライブの場所にrandom.txtファイルを生成します。 "D:\ random"を作成すると、ランダムなファイルが作成されますが、ファイルの種類が不足します。

+0

を参照してください。したがって、.txtを付けずにランダムに入力すれば、それでも動作します。この場合、どのようなファイルが作成されますか? – Eli

+0

拡張子を付けずにファイルオブジェクトを記述すると、ファイルオブジェクトで記述されたファイルが作成されます。詳細は、[https://docs.oracle.com/javase/7/docs/api/java/io/File.html](https://docs.oracle.com/javase/7/docs/api/)を参照してください。 java/io/File.html) –

関連する問題