Java:将原始数据写入文件时出现问题

Java:将原始数据写入文件时出现问题,java,Java,我试图用Java将Int、Float、Double等基本数据写入一个文件。每当我运行程序时,文本文件都包含一些随机字符。我正在使用jdk1.8.0_25和Npp编辑器。这是我获得的示例代码 import java.io.BufferedOutputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; pu

我试图用Java将Int、Float、Double等基本数据写入一个文件。每当我运行程序时,文本文件都包含一些随机字符。我正在使用jdk1.8.0_25和Npp编辑器。这是我获得的示例代码

import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class Tad {
  public static void main(String[] args) throws IOException {
    DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(
        new File("E:\\temp.txt"))));
    for (int i = 0; i < 10; i++)
      dos.writeInt(i);
    dos.close();

  }
}
import java.io.BufferedOutputStream;
导入java.io.DataOutputStream;
导入java.io.File;
导入java.io.FileOutputStream;
导入java.io.IOException;
公共类Tad{
公共静态void main(字符串[]args)引发IOException{
DataOutputStream dos=新的DataOutputStream(新的BufferedOutputStream)(新的FileOutputStream(
新文件(“E:\\temp.txt”);
对于(int i=0;i<10;i++)
dos.writeInt(i);
dos.close();
}
}
此处的输出不可复制,但它有空格和一些不属于键盘布局的奇怪符号。

如果要将内容“写入”文件,则不需要写入其二进制表示形式。 因此,您必须使用Java中的“Writer”实现,而不是“OutputStream”

您会在文件中看到奇怪的符号,因为它们是数据的二进制表示形式(ASCII码)

下面的代码实现了您要查找的内容。 学习愉快

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

class Test123 {

    public static void main(String[] args) throws IOException {
        Writer dos = new BufferedWriter(
                new FileWriter(new File("C:\\temp.txt")));
        for (int i = 0; i < 10; i++)
            dos.write(String.valueOf(i));
        dos.close();
    }
}
导入java.io.BufferedWriter;
导入java.io.File;
导入java.io.FileWriter;
导入java.io.IOException;
导入java.io.Writer;
类Test123{
公共静态void main(字符串[]args)引发IOException{
Writer dos=新的缓冲写入程序(
新文件编写器(新文件(“C:\\temp.txt”);
对于(int i=0;i<10;i++)
dos.write(String.valueOf(i));
dos.close();
}
}

尝试使用FileWRiter。我手头没有编译器,但应该是这样的:

import java.io.*

public static writeString(String text)
{
private static String fileName= "put path and file here";
try{
File file = new File(fileName);
FileWriter writer = new FileWriter(file, true); //true means append to the file instead of purging the file every entry.
writer.write(text);
writer.close(); //close the output
}catch(IOException e){
System.err.println("ioexception: " + e.getMessag());
}
}
我回家后会检查代码,看看是否没有问题,前提是在那之前没有人给出更好的答案,但这至少会让你走上正轨


注意-您应该处理IO中的异常情况,即随机字符是十进制0、1、2、3等的ASCII表示形式,直到127为止,您可以在下表中看到ASCII值,其中0=null,1=标题开始,等等

这是一个你想以我的风格实现的例子

public class Tad {
  public static void main(String[] args) throws IOException {
    FileWriter dos = new FileWriter(new File("E:\\temp.txt"));
    for (int i = 0; i < 10; i++)
      dos.write(i+"");  
    dos.close();

  }
}

是的,你把它写成二进制数据。它根本不是一个文本文件。如果要编写文本文件,应使用某种描述的
编写器
,例如
OutputStreamWriter
包装
FileOutputStream。
请查看
DataOutputStream
的文档。这是您需要的。当您编写二进制数据时,需要将其作为二进制数据读取。如果你想把它读成文本,你应该把它写成文本,比如用PrintWriter。我认为你的代码只会写(并覆盖)一行。我永远不会忘记,在编写类似的代码以刷新文件内容时遇到的困难是的,我想这只是为了学习OP,它确实会覆盖。“注意-你应该在IO中处理异常”-有趣的注意,因为你也没有做任何尝试。最低要求是使用
try(FileWriter writer=newfilewriter(file,true)){writer.write(text);}
,以确保在特殊情况下正确关闭资源。您当然是对的,但我只想举一个最小的例子,刚才提到了这个例子,以便op知道(他说他是一个新手)。我有一个坏习惯,就是依赖eclipse自定义try-catch块来为我做任何事情(我知道这是一个坏习惯)。正确处理结束的表单并不比另一个表单复杂,它实际上更短。我不知道有哪种Eclipse特性能比try-with-resource构造(当然,Eclipse支持这种构造)做得更好,异常处理并不复杂,但我记得我在过去遇到过一个问题——我曾将其作为代码的正常部分来获得某些行为——后来我才认识到,依赖异常发生而不是将其用作恢复是一种糟糕的编程实践。我只使用了一个自动完成功能,在这里我定制了try-catch块,这样我就不必键入我经常使用的部分(日志、打印堆栈跟踪),但在大多数情况下,如果发生异常,它会帮助跟踪它。
public class Tad {
  public static void main(String[] args) throws IOException {
    DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(
        new File("E:\\temp.txt"))));
    for (int i = 0; i < 10; i++){
       dos.writeChars(Integer.toString(i)); 
    }
    dos.close();

  }
}