Java ファイル操作
今回はファイル操作をやります。ファイル、フォルダの存在チェック、作成、コピー、削除、名前変更などです。
サンプル①
以下のサンプルでは、ファイルが存在する確認し、存在する場合は別フォルダにコピー、さらに名前変更(移動)を行っています。
package test;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class FileTest {
public static void main(String[] args) {
try {
String path = "C:\\work\\test.txt";
String dirPath = "C:\\work\\New";
File file = new File(path);
// ファイルが存在するか確認
if (file.exists()) {
File dir = new File(dirPath);
// フォルダが存在するか確認
if (!dir.exists()) {
// フォルダを作成
dir.mkdirs();
}
// パスを連結
Path filePath = Paths.get(dirPath, "testNew.txt");
// Paths.getの引数は一つでも良い
// Path filePath = Paths.get("C:\\work\\New\\testNew.txt");
// Java11から Path.of が使えるようになり今後はこちらの方が良い
// Path filePath = Path.of(dirPath, "testNew.txt");
// ファイルをコピー
Files.copy(file.toPath(), filePath);
Path filePathTo = Paths.get(dirPath, "testNew2.txt");
File fileFrom = new File(filePath.toString());
File fileTo = new File(filePathTo.toString());
if (fileTo.exists()) {
// ファイルを削除
fileTo.delete();
}
// ファイルを名前変更(移動)
fileFrom.renameTo(fileTo);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
ファイル、フォルダの存在チェック
File file = new File(パスの文字列);
// ファイルが存在するか確認
if (file.exists()) {
// ファイルが存在した場合の処理
}
パスの連結
C#のPath.Combineにあたるものが欲しかったのですが、Java1.7から出来るようになっていました。Paths.getでパスを連結します。
// パスを連結
Path filePath = Paths.get(パス文字列①, パス文字列②);
ファイルコピー
ファイルコピーはFiles.copyで実行します。これもJava1.7で出来るようになりました。
// ファイルをコピー
Files.copy(Pathオブジェクトコピー元, Pathオブジェクトコピー先);
名前変更(ファイル移動)
名前変更(ファイル移動)はファイルオブジェクトのrenameToメソッドで行います。
// ファイルを名前変更(移動)
Fileオブジェクト移動元.renameTo(Fileオブジェクト移動先);
ファイル、フォルダ削除
ファイル、フォルダ削除はファイルオブジェクトのdeleteメソッドで行います。フォルダの中身は空にする必要があります。
// ファイルを削除
Fileオブジェクト.delete();
サンプル②
以下のサンプルでは、フォルダ内のフォルダ・ファイル一覧を取得しています。
package test;
import java.io.File;
public class FileTest {
public static void main(String[] args) {
String dirPath = "C:\\work";
File dir = new File(dirPath);
// フォルダが存在するか確認
if (dir.exists()) {
// フォルダ、ファイルの一覧を取得
File[] files = dir.listFiles();
for (File file : files) {
// フォルダの場合
if (file.isDirectory()) {
System.out.println("Dir:" + file.getName());
}
// ファイルの場合
else if (file.isFile()) {
System.out.println("File:" + file.getName());
}
}
}
}
}
指定フォルダ配下にある全ファイルを再帰的に取得するサンプル
package test;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class FileTest {
public static void main(String[] args) {
File dir = new File("C:\\work\\a");
try {
List<String> ary = getPathList(dir);
for (String str : ary) {
System.out.println(str);
}
} catch (IOException e) {
e.printStackTrace();
}
}
// 指定フォルダ配下にある全ファイルを再帰的に取得
public static List<String> getPathList(File dir) throws IOException {
List<String> ret = new ArrayList<>();
// フォルダ、ファイルの一覧を取得
File[] files = dir.listFiles();
for (File file : files) {
if (file.isDirectory()) {
ret.addAll(getPathList(file));
} else {
ret.add(file.getAbsolutePath());
}
}
return ret;
}
}
フォルダ、ファイルの一覧を取得
フォルダ、ファイルの一覧取得はファイルオブジェクトのlistFilesメソッドで行います。
// フォルダ、ファイルの一覧を取得
File[] files = ファイルオブジェクト.listFiles();
フォルダ、ファイルの確認
フォルダ、ファイルの確認はファイルオブジェクトのisDirectoryメソッド、isFileメソッドで行います。
// フォルダの場合
if (ファイルオブジェクト.isDirectory()) {
}
// ファイルの場合
if (ファイルオブジェクト.isFile()) {
}
サンプル③
フルパス、親フォルダ、ファイル名、拡張子を取得するサンプル
package test;
import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
public class FileTest {
public static void main(String[] args) {
String fullPath = "C:\\work\\test.txt";
File f = new File(fullPath);
// フルパス → C:\work\test.txt
System.out.println(f.getPath());
// 親フォルダ → C:\work
System.out.println(f.getParent());
// ファイル名 → test.txt
System.out.println(f.getName());
String name = f.getName();
// ファイル名(拡張子なし) → test
System.out.println(name.substring(0, name.lastIndexOf('.')));
// 拡張子 → txt
System.out.println(name.substring(name.lastIndexOf('.') + 1).toLowerCase());
Path p = Paths.get(fullPath);
// フルパス → C:\work\test.txt
System.out.println(p);
// 親フォルダ → C:\work
System.out.println(p.getParent());
// ファイル名 → test.txt
System.out.println(p.getFileName());
}
}
ページのトップへ戻る