Java のファイルパス
Java でファイルを操作するときは、正しいファイル名と正しいパスおよび拡張子を指定することが重要です。
使用しているファイルは、同じディレクトリまたは別のディレクトリにある可能性があります。ファイルの場所に応じて、パス名が変わります。
この記事では、Java でファイルパスにアクセスして指定する方法について説明します。
Java ファイルの読み取り
ファイルの読み取りとは、ファイルの内容を取得することを意味します。Java Scanner
クラスを使用してファイルを読み取ります。例を通してこれを理解しましょう。
まず、新しいファイルを作成するための Java プログラムを作成します。次に、この新しく作成されたファイルにコンテンツを追加する別の Java プログラムを作成します。
最後に、このファイルの内容を読み取ります。この記事のプログラムはいずれもオンラインコンパイラでは実行されないことに注意してください(パスが正しく設定されたオフラインコンパイラを使用してください)。
ファイルを作成する
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
// Try catch block
try {
// Creating a file with the name demofile.txt
File myFile = new File("demofile.txt");
if (myFile.createNewFile()) {
System.out.println("The file is created with the name: " + myFile.getName());
} else {
System.out.println("The file already exists.");
}
} catch (IOException x) {
System.out.println("An error is encountered.");
x.printStackTrace();
}
}
}
出力:
The file is created with the name: demofile.txt
このファイルは、Java ファイルが存在するのと同じディレクトリに作成されます。すべての Java プログラムファイルは C ディレクトリにあります。
ファイルにコンテンツを追加する
import java.io.FileWriter;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try {
// create an object
FileWriter writeInFile = new FileWriter("demofile.txt");
// Adding content to this file
writeInFile.write("We are learning about paths in Java.");
writeInFile.close();
System.out.println("Successfully done!");
} catch (IOException x) {
System.out.println("An error is encountered.");
x.printStackTrace();
}
}
}
出力:
Successfully done!
ファイルを読む
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner; //scanner class for reading the file
public class Main {
public static void main(String[] args) {
try {
File myFile = new File("demofile.txt");
// create the scanner object
Scanner readFile = new Scanner(myFile);
while (readFile.hasNextLine()) {
String data = readFile.nextLine();
System.out.println(data);
}
readFile.close();
} catch (FileNotFoundException x) {
System.out.println("An error occurred.");
x.printStackTrace();
}
}
}
出力:
We are learning about paths in Java.
ここでは、File()
メソッド内で、ファイルの名前とその拡張子のみを渡すことに注意してください。
demofile.txt
の完全なパスを指定していません。demofile.txt
は、これらすべての Java プログラムファイルを保存するのと同じディレクトリとフォルダにあります。
ただし、demofile.txt
が別のディレクトリまたはフォルダにある場合、このファイルの読み取りはそれほど簡単ではありません。このような場合、ファイルの完全なパスを指定します。
Java のファイルシステムの詳細については、このドキュメントを参照してください。
Java でファイルパスを指定する方法
ファイルのパスを指定するには、File()
メソッド内でファイルの名前と拡張子を渡します。このようにします。
new File("demofile.txt")
ファイル名は、ファイルが作業プロジェクトのディレクトリと同じフォルダにある場合にのみ十分であることに注意してください。それ以外の場合は、ファイルの完全なパスを指定する必要があります。
ファイルの名前がわからない場合は、list()
メソッドを使用してください。このメソッドは、現在のディレクトリ内のすべてのファイルのリストを返します。
java.io
ライブラリの File
クラスに存在する list()
メソッドは、すべてのファイルとディレクトリのリストを配列として返します。返される出力は、抽象パス名で定義された現在のディレクトリに基づいています。
抽象パス名がディレクトリを示さない場合、list()
メソッドは null
を返します。ファイルの場所がわからない場合があります。
さらに、読み取らなければならないファイルが現在の作業ディレクトリに存在しない場合、エラーが発生します。これらの問題を回避するには、ファイルの完全なパスを使用することをお勧めします。
ファイルの正確なパスを取得するには、以下のメソッドを使用します。
Java でファイルパスを取得する方法
ファイルのパスがわからない場合は、Java のいくつかのメソッドを使用してファイルのパスを見つけることができます。次に、このパス名を引数として指定できます。
Java は、absolute
、canonical
、および abstract
の 3 種類のファイルパスを提供します。java.io.file
クラスには、ファイルのパスを見つけるための 3つのメソッドがあります。
Java で getPath()
メソッドを使用してファイルパスを取得する
getPath()
メソッドは、Java の File クラスに属しています。抽象ファイルのパスを文字列として返します。
抽象パス名は、ディスク上のファイルを参照する java.io.file
のオブジェクトです。
構文:
file.getPath()
例:
import java.io.*;
public class Main {
public static void main(String args[]) {
try {
// create an object
File myFile = new File("demo.txt");
// call the getPath() method
String path = myFile.getPath();
System.out.println("The path of this file is: " + path);
} catch (Exception e) {
System.err.println(e.getMessage());
}
}
}
出力:
The path of this file is: demo.txt
上記の出力でわかるように、拡張子が付いたファイルの名前のみが出力になります。これは、ファイルが Java プログラムファイルと同じフォルダにあることを示しています。
Java で getAbsolutePath()
メソッドを使用してファイルパスを取得する
getAbsolutePath()
メソッドは、ファイルの絶対パスとして文字列を返します。絶対パス名を使用してファイルを作成すると、getAbsolutePath()
メソッドはパス名を返します。
ただし、相対パスを使用してオブジェクトを作成する場合、getAbsolutePath()
メソッドはシステムに応じてパス名を解決します。これは、Java の File クラスに存在します。
構文:
file.getAbsolutePath()
絶対パスは、ファイルが存在するディレクトリに関係なく、システムに存在するファイルの完全な URL を提供するパスであることに注意してください。一方、相対パスは、現在のディレクトリへのファイルのパスを提供します。
例:
// import the java.io library
import java.io.*;
public class Main {
public static void main(String args[]) {
// try catch block
try {
// create the file object
File myFile = new File("pathdemo.txt");
// call the getAbsolutePath() method
String absolutePath = myFile.getAbsolutePath();
System.out.println("The Absolute path of the file is: " + absolutePath);
} catch (Exception e) {
System.err.println(e.getMessage());
}
}
}
出力:
The Absolute path of the file is: C:\Users\PC\pathdemo.txt
今回は、現在の作業ディレクトリからファイルが存在する現在のフォルダまで、完全な作業パスを取得することに注意してください。
したがって、ファイルの場所がわからない場合は、絶対パス方式を使用してファイルが存在する場所を見つけてください。そうすれば、そのファイルを読み取る必要があるときはいつでも、そのパスを指定できます。
このようにして、読み取るファイルを簡単に見つけることができます。
Java で getCanonicalPath()
メソッドを使用してファイルパスを取得する
Path
クラスに存在すると、ファイルの正規パスが返されます。パス名が正規の場合、getCanonicalPath()
メソッドはファイルのパスを返します。
正規のパスは常に一意で絶対的です。さらに、このメソッドはすべての .
を削除しますまたはパスから ..
。
構文:
file.getCanonicalPath()
例:
// import the java.io library
import java.io.*;
public class Main {
public static void main(String args[]) {
// try catch block
try {
// create the file object
File myFile = new File("C:\\Users");
// call the getCanonicalPath() method
String canonical = myFile.getCanonicalPath();
System.out.println("The Canonical path is : " + canonical);
} catch (Exception x) {
System.err.println(x.getMessage());
}
}
}
出力:
The Canonical path is:C:\Users
Java のパスの詳細については、このドキュメントを参照してください。
まとめ
この記事では、ファイルを読み取る必要がある場合にファイルのパスを指定する方法を説明しました。また、ファイルのパスを取得するために Java が提供する getPath()
、getAbsolutePath()
、getCanonical()
パスなどのさまざまなメソッドについても学習しました。
さらに、ファイルと現在のプロジェクトのディレクトリとフォルダに応じてパスがどのように変化するかを確認しました。また、デモンストレーションとしていくつかのファイルを作成して読み取りました。
ただし、これらのプログラムはオンラインコンパイラでは実行されません。
関連記事 - Java File
- Java でファイルから改行を削除する方法
- Java でファイルを閉じる
- Java JAR ファイルの作成と実行
- Java で 2つのファイルの内容を比較する
- Java でファイル サイズを取得する
- Java でファイルからバイトを読み取る