当前位置: 代码迷 >> J2SE >> 狂怒!哪位达人帮小弟我解决这个写文件的有关问题!100分抛
  详细解决方案

狂怒!哪位达人帮小弟我解决这个写文件的有关问题!100分抛

热度:73   发布时间:2016-04-24 13:13:07.0
狂怒!哪位达人帮我解决这个写文件的问题!!100分抛
windows下一个进程写文件ok,命令行下同时运行两个进程,总会丢失几条!!
代码如下:
Java code
import java.io.BufferedWriter;import java.io.PrintWriter;import java.io.FileWriter;public class WriteFile {        public static void main(String[] args) {        long times = 3000;        for (int i = 0; i < times; i++) {            //write1(Integer.toString(i+1));            write2(Integer.toString(i+1));        }        System.out.println("finished!");    }    private static void write1(String content) {        FileWriter fw = null;        BufferedWriter bw = null;        try {            fw = new FileWriter("d:\\1.txt", true);            bw = new BufferedWriter(fw);            bw.write(content);            bw.newLine();            bw.flush();            bw.close();            fw.close();        } catch (Exception e) {            // TODO: handle exception        }    }        private static synchronized void write2(String content) {        FileWriter fw = null;        PrintWriter pw = null;        try {            fw = new FileWriter("d:\\2.txt", true);            pw = new PrintWriter(fw);            pw.println(content);            pw.close();            fw.close();        } catch (Exception e) {            // TODO: handle exception        }    }}


------解决方案--------------------
丢失应该是正常的,调用write1和write2方法应该是一样的
这里不存在多线程问题,同步不起作用。

两个不同的进程是独立的,各自运行于一个独立的jvm中。

两个进程同时写一个文件,结果应该依赖于操作系统的文件处理方式。
------解决方案--------------------
没有多线程啊,应该不存在丢失的问题啊
------解决方案--------------------
synchronized本来就是对线程进行同步化,对进程不起作用.
java下面好像没有对进程同步化的控制.
要么你对文件进行加锁,每个线程写的时候加锁,写完解锁.
------解决方案--------------------
同楼上.同步无效,文件被覆盖,解决方案从操作系统入手,文件加锁比较好.
------解决方案--------------------
第一,这个程序与线程无关.
第二,我帮你测试了一下,并没有数据丢失.
------解决方案--------------------
没出现什么问题!!
------解决方案--------------------
因为每个进程都有自己的文件偏移量
  相关解决方案