Android有两个相同的文件写入——一个使用0D0A,另一个使用0A

Android有两个相同的文件写入——一个使用0D0A,另一个使用0A,android,Android,我会在按下两个按钮后,一个接一个地写入两个文件。除了文件名之外,代码是相同的 try{ FileWriter fw = new FileWriter(fileName,true); //fw.write(String.format("%s,%s,%s",name, latitude, longitude)); fw.write("hello world"); fw.write(String.valueOf("\n")); fw.flush(); f

我会在按下两个按钮后,一个接一个地写入两个文件。除了文件名之外,代码是相同的

try{
    FileWriter fw = new FileWriter(fileName,true);
    //fw.write(String.format("%s,%s,%s",name, latitude, longitude));
    fw.write("hello world");
    fw.write(String.valueOf("\n"));
    fw.flush();
    fw.close();
}
在一个文件中,我的行以0D0A结尾,而在另一个文件中,我的行仅以0A结尾。这两个函数都是由于按下按钮而调用的

事实上,我将上述代码复制到每个例程中并进行了尝试。我试着删除文件,然后重新开始,看看是否有某种未知的(对我来说)文件属性在起作用

我的所有其他文件都使用0D0A,这是我希望在所有文件上看到的

我不知道发生了什么,也不知道如何改变它

谢谢

艾伦

我在onCreate中添加了一条语句

System.setProperty(“line.separator”,“\r\n”),它没有任何区别。 提示:我的程序中的另一个例程可以重写有问题的文件。完成后,我可以在文件末尾添加内容,得到预期的0D0A

创建该文件的人在荷兰,因此可能是某个隐藏的文件属性。我怎样才能强迫事情发生


这个文件不起作用。最后一行仅在0A中终止

SVC9,51.606722,3.852682
SVC8,51.616598,3.822033
SVC7,51.608025,3.836555
SVC6,51.615535,3.805132
SVC5,51.609053,3.820373
SVC4,51.614403,3.787843
SVC3,51.606722,3.798665
SVC16,51.609968,3.882362
SVC12,51.613443,3.86097
SVC11,51.604355,3.870577
SVC1,51.600272,3.751823
SVC10,51.617602,3.839977
SVC14O,51.610825,3.877807
aa, 51.6068687, 3.8523572
我重新编写了相同的文件,并添加了一个bb行,这很好

SVC9,51.606722,3.852682
SVC8,51.616598,3.822033
SVC7,51.608025,3.836555
SVC6,51.615535,3.805132
SVC5,51.609053,3.820373
SVC4,51.614403,3.787843
SVC3,51.606722,3.798665
SVC16,51.609968,3.882362
SVC12,51.613443,3.86097
SVC11,51.604355,3.870577
SVC1,51.600272,3.751823
SVC10,51.617602,3.839977
SVC14O,51.610825,3.877807
aa, 51.6068687, 3.8523572
bb, 51.6068687, 3.8523572
重写修复了0A问题,因为我写了一个“\n”,并且在该代码中给出了0D0A。在上面的文件中看不到任何差异。但在二进制查看器中,坏文件以0A结尾,好文件以0D0A结尾


我改了密码。现在,我使用同一个函数写入工作文件和不工作文件

这是一个有效的方法

String fileName = baseDir + "/StartLine/Waypoint_log.csv";
String contents = String.format(Locale.US,"%s,%s,%s,%s,%s,0,%s\n",markTypeNumber,markType,(String)s,latitude,longitude,name);
String message = "Mark";
writeToFile(fileName, contents, message);
这是一个不起作用的电话

String fileName = baseDir + "/StartLine/waypoints/" + fileUsed;
String contents = String.format(Locale.US,"%s,%s,%s\n",name,latitude,longitude);
writeToFile(fileName,  contents, "Waypoint");
下面是执行写入操作的例程


我想您只是想写一些东西\r\n来达到目的?为什么不直接写这些字符,而不是依靠虚拟机来为您完成呢?将其写入字节[],如果输出不同,则对其进行调试。此外,您正在附加到文件,这意味着某些信息已经存在,可能会使您放弃。发布更多细节。假设它在功能上是纯的(它不是),那么就没有区别了。另外:只需在\n而不是\r\n上拆分和修剪,此问题就会消失。你正在linux环境中运行。文件中肯定有什么东西让我不舒服。如果我用相同的内容重写文件,它就可以正常工作。这两个版本在字节方面看起来是相同的,因此它必须是文件属性或编码中的某个内容。就linux环境而言,该程序工作正常,但文件导入DOS环境后很难读取。这是很难真正调试,因为我必须让荷兰人尝试的东西,并发送给我。我做了一些修改让他测试。你能发布更多的代码吗?(即他发送的代码?)。我想这只是在某处添加“\n”而不是分隔符的问题。至于时间与实际问题,在Windows环境中使用记事本++或其他编辑器,这样可以节省时间。老实说,如果你没有他的消息来源,那就不值得再忍受了
\n
完全可以接受,并且易于处理。他不发送任何代码,只发送一个文本文件。我复制了两个文本文件的尾端,一个是好的,一个是坏的,但在这里它们看起来是一样的。一个以0A结尾,另一个以0D0A结尾。好的文件是由我的程序使用“\n”分隔符再次写出的。我对我的代码进行了更改,并将在上面发布。它不起作用。
public void writeToFile(String fileName, String contents, String message){
    try{
        FileWriter fw = new FileWriter(fileName,true);
        fw.write(contents);
        fw.flush();
        fw.close();
        Toast toast=Toast.makeText(this, message + " Saved",Toast.LENGTH_SHORT);
        toast.show();
    }
    catch(Exception e){
        Toast toast=Toast.makeText(this, "ERROR: " + "message" +  "NOT Saved",Toast.LENGTH_SHORT);
        toast.show();
    }
}