验证例子:
import java.io.File;
import java.io.FileOutputStream;
public class MainApp {
public static void main(String[] args) throws Exception{
String arg0 = args[0];
String arg1 = args[1];
int count = Integer.parseInt(arg1);
long t1 = System.currentTimeMillis();
File file = new File("1.txt");
FileOutputStream fos = new FileOutputStream(file);
for(int i=0;i<count;i++){
fos.write("1111111111\n".getBytes("UTF-8"));
if(arg0.equals("1")){
fos.getChannel().force(true);
}
if(arg0.equals("2")){
fos.getFD().sync();
}
}
fos.flush();
fos.close();
long t2 = System.currentTimeMillis();
System.out.println((t2-t1)/1000.0+"s");
}
}
把MainApp.java拷贝到阿里云服务器中,进行javac编译。
执行命令:
java MainApp 0 1000000
生成了1.txt文件,耗时1.3秒左右,文件内容是一百万行数据:
此时去阿里云平台进行强制关机:
再开机进入工作目录查看文件,会发现1.txt的内容是空的:
如果执行的命令是
java MainApp 1 1000000
或者
java MainApp 2 1000000
则强制关机后,文件内容依然在,不会丢失,只是耗时更长,100万行记录需要耗时16分钟左右。