ファイルシステム
Java
Fileクラス
public static final String pathSeparator (Windows:";", Linux:":")
public static final String separator (Windows:"\", Linux:"/")
public File(String pathname)
public boolean createNewFile() throws IOException
public boolean delete()
public boolean exists()
public boolean isDirectory()
public long length()
public String[] list()
public File() listFiles()
public boolean mkdir()
public boolean renameTo(File dest)
★ファイル・ディレクトリの作成
File newFile = new File("C:/temp/new.txt");
boolean isSuccess = newFile.createNewFile();
File newDirectory = new File("C:/temp/abc");
boolean isSuccess = newDirectory.mkdir();
File newDirectories = new File("C:/temp/abc/dfe"); // 複数作成
boolean isSuccess = newDirectory.mkdirs();
※マルチOS対応:File f = new File("C:" + File.separator + "new.txt") ;
★ファイルの確認
File existFile = new File("C:/temp/exist.txt");
boolean flg = existFile.exists();
boolean flg = existFile.isFile();
boolean flg = existFile.isDirectory();
boolean flg = existFile.isHidden();
boolean flg = existFile.isAbsolute();
// 権限表示
boolean flg = existFile.canRead();
boolean flg = existFile.canWrite();
boolean flg = existFile.canExecute();
// 権限変更
existFile.setReadOnly();
existFile.setReadable();
existFile.setWritable();
existFile.setExecutable();
String rtn = existFile.getAbsolutePath(); // C:/temp/exist.txt
String rtn = existFile.getName(); // exist.txt
String rtn = existFile.getPath(); // C:/temp/exist.txt
String rtn = existFile.getParent(); // C:/temp
String size = existFile.length(); // ファイルサイズ
★ドライブ容量を取得(単位:byte)
File file = new File("C:/");
long space = file.getTotalSpace();
long space = file.getFreeSpace();
long space = file.getUsableSpace();
ちなみに、メモリ容量を取得(単位:byte)
Runtime runtime = Runtime.getRuntime();
long mem = runtime.freeMemory();
long mem = runtime.totalMemory();
★ファイル一覧を取得
File directory = new File("C:/temp/abc");
String[] listFileNames = directory.list();
File[] listFiles = directory.listFiles();
// ".txt"を含むファイルの一覧
File[] listFiles = directory.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
boolean result = false;
if(name != null && name.contains(".txt")){
result = true;
}
return result;
}
});
・list() / list(FilenameFilter filter) / list(FileFilter filter)
・listFiles() / listFiles(FilenameFilter filter) / listFiles(FileFilter filter)
★ファイルの読み込み
小ファイルの場合
//Guava
Files.readLines(new File(path), Charsets.UTF_8);
//Apache Commons IO
FileUtils.readLines(new File(path));
大ファイルの場合
方法1:FileInputStream
try (FileInputStream inputStream = new FileInputStream(path);
Scanner sc = new Scanner(inputStream, "UTF-8")) {
while (sc.hasNextLine()) {
String line = sc.nextLine();
...
}
if (sc.ioException() != null) {
throw sc.ioException();
}
}
方法2:Apache Commons IO
LineIterator it = FileUtils.lineIterator(theFile, "UTF-8");
try {
while (it.hasNext()) {
String line = it.nextLine();
...
}
} finally {
LineIterator.closeQuietly(it);
}
Java
★一時ファイルはプログラムの終了前に削除 (Java SE 7のNIO2)
import java.nio.charset.Charset;
import java.nio.file.FileAlreadyExistsException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
Path tempFile = null;
try {
tempFile = Files.createTempFile("temp", ".tmp");
try (BufferedWriter writer = Files.newBufferedWriter(tempFile, Charset.forName("UTF8"), StandardOpenOption.DELETE_ON_CLOSE)) {
// do something
}
} catch (FileAlreadyExistsException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
※DELETE_ON_CLOSE:ファイルはクローズ時に自動的に削除される
★文末に内容を追加
BufferedWriter out = null;
try {
out = new BufferedWriter(new FileWriter("C:/temp/add.txt", true));
out.write("内容");
} catch (IOException e) {
e.printStackTrace();
} finally {
if(out != null){
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
★コンソール出力をファイルに書きこむ
PrintStream out = System.out;
PrintStream ps = new PrintStream( "D:/log.txt");
System.setOut(ps);
System.out.println( "ファイルへ");
System.setOut(out);
System.out.println( "xxx");
★ファイルの最新更新日時
File existFile = new File("C:/temp/exist.txt");
Date date = new Date(existFile.lastModified());
existFile.setLastModified(Calendar.getInstance().getTimeInMillis());
★ファイル名の変更、ファイルの削除
File fromFile = new File("C:/temp/from.txt");
File toFile = new File("C:/temp/to.txt");
boolean isSuccess = fromFile.renameTo(toFile);
if(fromFile.exsits()){
boolean isSuccess = fromFile.delete();
}
★Manipulating Files (JavaSE 7)
Path target = Paths.get("/tmp/test.txt");
Path file = Files.createFile(target);
Files.delete(target);
Path target = Paths.get("/tmp/test.txt");
Set<PosixFilePermission> perms
= PosixFilePermissions.fromString("rw-rw-rw-");
FileAttribute<Set<PosixFilePermission>> attr
= PosixFilePermissions.asFileAttribute(perms);
Files.createFile(target, attr);
import static java.nio.file.StandardCopyOption.*;
Path source = Paths.get("/tmp/test.txt");
Path target = Paths.get("/tmp/backup/test.txt");
Files.copy(source, target);
Files.copy(source, target, REPLACE_EXISTING);
Files.move(source, target, REPLACE_EXISTING, COPY_ATTRIBUTES);