1. コード
package com.task.test;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class T5 {
public static void main(String[] args) throws IOException {
List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
T5.generateText2("E:/1/2/3/4/5/file2.txt",list);
T5.generateText1("E:/1/2/3/4/5/file1.txt",list);
}
public static void generateText1(String fileName,List<String> list) throws IOException{
/* 写入Txt文件 */
File writename = new File(fileName);
if(!writename.isFile() && !writename.exists()){ //判断文件是否存在){}
String path = fileName.substring(0,fileName.lastIndexOf("/"));
new File(path).mkdirs();
String name = fileName.substring(fileName.lastIndexOf("/"));
new File(name).createNewFile();
}
BufferedWriter out = new BufferedWriter(new FileWriter(writename,true));
if (list.size()>0) {
for (int i = 0; i <list.size(); i++) {
out.write(list.get(i));
}
}
out.flush(); // 把缓存区内容压入文件
out.close(); // 最后记得关闭文件
System.out.println("1文件创建成功 = " + fileName);
}
/* 写入Txt文件 */
public static void generateText2(String fileName,List<String> list) throws IOException{
File writename = new File(fileName);
//判断文件是否存在
if(!writename.isFile() && !writename.exists()){
// 创建新文件
writename.createNewFile();
}
BufferedWriter out = new BufferedWriter(new FileWriter(writename,true));
if (list.size()>0) {
for (int i = 0; i <list.size(); i++) {
out.write(list.get(i));
}
}
out.flush(); // 把缓存区内容压入文件
out.close(); // 最后记得关闭文件
System.out.println("2文件创建成功 = " + fileName);
}
}
2. 試験結果の比較
方法1を先に実行してから方法2を実行しても問題ありません
図のようにファイルを作成します
最初に方法 2 を実行し、次に方法 1 を実行すると、パスが見つかりません
3. コード分析
2 つの方法は、後半の「ファイルにデータを書き込む」部分は同じですが、前者はファイル ディレクトリ new File(path).mkdirs(); を作成し、その後ファイル new File(name) を作成する点が異なります。 .createNewFile(); 一方、後者はファイルを直接作成します。
createNewFile のソース コードを表示します。
その名前のファイルがまだ存在しない場合に限り、この抽象パス名で名付けられた新しい空のファイルを原子的に作成します。ファイルの存在を確認し、存在しない場合にファイルを作成することは、ファイルに影響を与える可能性のある他のすべてのファイル システム アクティビティと同様に、アトミックな操作です。
注: 結果として得られるプロトコルを確実に動作させることができないため、この方法はファイルのロックには使用しないでください。代わりに FileLock 機能を使用する必要があります。
戻り値: 指定されたファイルが存在せず、正常に作成された場合は true、指定されたファイルがすでに存在する場合は false
プラットフォームのネイティブ ファイル システムを表す FileSystem オブジェクト。
この抽象パス名の正規化されたパス名文字列。正規化されたパス名文字列では、デフォルトの名前区切り文字が使用され、繰り返しまたは冗長な区切り文字は含まれません。