FileWriter 写完文件,用System.exit(0);文件就被删除了

javaweb_coder 2013-09-16 10:48:24
如题,先调用writeToIniFile,其中先删除这个文件,再重新写。问题是只要一执行到System.exit(0)刚写的文件就被删除了,什么原因?


public void writeToIniFile() throws IOException {
System.out.println("start to write info into news.ini");

String newsIni = USBConfig.drivePath + USBConfig.INIT_NEW_FOLDER + "\\news.ini";
File f = new File(newsIni);
if(f.exists()){
f.delete();
}
f.createNewFile();
int sum = this.getnewsList().size();
List<String> lines = new ArrayList<String>();
lines.add("[news]");
lines.add("sum="+sum);
StringBuilder line = new StringBuilder("news");
for(int i=0; i < sum; i++){
News n = this.getnewsList().get(i);
line.append(i).append("=").append(n.content);
lines.add(line.toString());
line = new StringBuilder("news");
}
System.out.println("the lines in memory ===============");
for(String s : lines){
System.out.println(s);
}
System.out.println("the lines in memory ===============");

FileReaderUtils.writeToFile(lines, f);

}



public static void writeToFile(List<String> lines, File ff) throws IOException{
System.out.println("writeToFile function started.");
File f = new File(ff.getAbsolutePath());
f.createNewFile();
String encoding = code(f);
FileOutputStream fos = new FileOutputStream(f);
OutputStreamWriter writer = new OutputStreamWriter(fos,
encoding);
// FileWriter fw = new FileWriter(f);
BufferedWriter bw = new BufferedWriter(writer);
for(String s : lines){
// bw.append(s);
bw.write(s);
bw.newLine();
bw.flush();
}
bw.flush();
writer.flush();
fos.flush();
bw.close();
writer.close();
fos.close();
System.out.println("writeToFile function finished.");
}
...全文
385 13 打赏 收藏 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
teemai 2013-09-23
  • 打赏
  • 举报
回复
你程序有删除文件的地方吗? 比如判断是否存在,如果存在的话就删除了,然后再重新创建。 这里删除的时候要注意使用onDelete,不要使用onExistDelete。具体可以看API。
javaweb_coder 2013-09-23
  • 打赏
  • 举报
回复
引用 12 楼 huxiweng 的回复:
你程序有删除文件的地方吗? 比如判断是否存在,如果存在的话就删除了,然后再重新创建。 这里删除的时候要注意使用onDelete,不要使用onExistDelete。具体可以看API。
原因找到了,就是onExistDelete的问题。
晓敬 2013-09-18
  • 打赏
  • 举报
回复
是不是这个程序的System.exit的时候调用了文件删除函数....或者是某个信号给处理了!
oh_Maxy 2013-09-17
  • 打赏
  • 举报
回复
一定要用System.exit(0)来结束程序么?
javaweb_coder 2013-09-17
  • 打赏
  • 举报
回复
引用 6 楼 rainbowsix 的回复:
去看看创建文件的API吧,有很多种的,你这创建的是临时文件。 也有可能是file没有close 都试下
File API就那么点,我都试了下。感觉是和流没正常关闭有关,我再仔细看看
javaweb_coder 2013-09-17
  • 打赏
  • 举报
回复
引用 5 楼 fangmingshijie 的回复:
不知道你System.exit(0);放在哪里,System.exit(0);是清除整个jvm里的内容,如果在你文件flush或者close前使用System.exit(0);应该会出现你这个情况的。System.exit(0);放到finally里或者最后面。
我都是等程序执行到System.out.println("writeToFile function finished.");这里结束了,然后点了一个按钮。按钮绑定的事件就是System.exit(0); 只要我不点那个按钮,文件内容都也写好了,而且文件也一直在。太奇怪了。
无聊找乐 2013-09-17
  • 打赏
  • 举报
回复
去看看创建文件的API吧,有很多种的,你这创建的是临时文件。 也有可能是file没有close 都试下
踩踩一哥 2013-09-17
  • 打赏
  • 举报
回复
public void writeToIniFile() throws IOException { System.out.println("start to write info into news.ini"); String newsIni = USBConfig.drivePath + USBConfig.INIT_NEW_FOLDER + "\\news.ini"; File f = new File(newsIni); if(f.exists()){ f.delete(); } f.createNewFile(); int sum = this.getnewsList().size(); List<String> lines = new ArrayList<String>(); lines.add("[news]"); lines.add("sum="+sum); StringBuilder line = new StringBuilder("news"); for(int i=0; i < sum; i++){ News n = this.getnewsList().get(i); line.append(i).append("=").append(n.content); lines.add(line.toString()); line = new StringBuilder("news"); } System.out.println("the lines in memory ==============="); for(String s : lines){ System.out.println(s); } System.out.println("the lines in memory ==============="); FileReaderUtils.writeToFile(lines, f); } System.exit(0)你应该写在这个类里面吧,你写在了这里: 我都是等程序执行到System.out.println("writeToFile function finished.");这里结束了,然后点了一个按钮。按钮绑定的事件就是System.exit(0);是写在函数里面。调用的时候程序已经退出了。。。
  • 打赏
  • 举报
回复
不知道你System.exit(0);放在哪里,System.exit(0);是清除整个jvm里的内容,如果在你文件flush或者close前使用System.exit(0);应该会出现你这个情况的。System.exit(0);放到finally里或者最后面。
javaweb_coder 2013-09-16
  • 打赏
  • 举报
回复
引用 2 楼 udbwcso 的回复:
在你贴的代码中没看到System.exit(0)
我其他地方会调用System.exit(0);就是一个关闭程序,我点了执行了System.exit(0);刚生成的文件就被删除了。只要不执行到System.exit(0);那个文件就一直在的。
javaweb_coder 2013-09-16
  • 打赏
  • 举报
回复
引用 1 楼 fangmingshijie 的回复:
FileReaderUtils.writeToFile(lines, f);调用这个方法又会创建一次f了。
之前是这样的,也还是不行:

public static void writeToFile(List<String> lines, File f) throws IOException{
		System.out.println("writeToFile function started.");
//		File f = new File(ff.getAbsolutePath());
//		f.createNewFile();
		String encoding = code(f);
		FileOutputStream fos = new FileOutputStream(f);
		OutputStreamWriter writer = new OutputStreamWriter(fos,
				encoding);
//		FileWriter fw = new FileWriter(f);
		BufferedWriter bw = new BufferedWriter(writer);
		for(String s : lines){
//			bw.append(s);
			bw.write(s);
			bw.newLine();
			bw.flush();
		}
		bw.flush();
		writer.flush();
		fos.flush();
		bw.close();
		writer.close();
		fos.close();
		System.out.println("writeToFile function finished.");
	}
尘缘udbwcso 2013-09-16
  • 打赏
  • 举报
回复
在你贴的代码中没看到System.exit(0)
  • 打赏
  • 举报
回复
FileReaderUtils.writeToFile(lines, f);调用这个方法又会创建一次f了。
代码下载链接: https://pan.quark.cn/s/a4b39357ea24 用户账户控制(UAC)白名单的配置 Windows7环境中 UAC(User Account Control,用户帐户控制)是由微软在Windows Vista版本中推出的一项旨在增强系统安全性的创新技术,该技术强制要求用户在执行可能干扰计算机正常运作的操作或进行更改会波及其他用户设置的变动前,必须提供相应的权限或管理员密码进行验证。通过对这些操作启动前进行授权确认,UAC能够有效阻止恶意软件及间谍软件在未获授权的状态下于计算机内进行安装或实施修改。 自从Vista版本问世以来,微软便开始推行这一全新的安全机制,可视为对系统安全防护的显著提升。尽管UAC确实能够在一定程度上对某些非法程序起到防御作用,但与此同时,这一功能也给众多用户带来了诸多不便。 因此,许多用户开始探寻是否存在类似于白名单的功能,以便将那些值得信赖的程序直接赋予运行权限。事实上,这类功能确实存在,不过微软并未将其作为标准配置提供。 网络上关于此问题的绝大多数建议都是建议禁用UAC,这种说法显然缺乏针对性,因为若用户希望禁用此功能,本就不会提出相关疑问。 通过运用微软官方发布的Microsoft Application Compatibility Toolkit 5.6版本,可以将信任的程序纳入系统白名单范畴。 获取Application Compatibility Toolkit 安装程序成功后会出现三个可执行文件 以管理员身份启动Compatibility Administrator 在Custom DataBases部分创建新的数据库,并添加一个Application Fix(在下方空白处点击右键,选择...

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧