Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:Printwriter工作得几乎完美,但插入了一些奇怪的字符。。。为什么会这样?_Java - Fatal编程技术网

Java:Printwriter工作得几乎完美,但插入了一些奇怪的字符。。。为什么会这样?

Java:Printwriter工作得几乎完美,但插入了一些奇怪的字符。。。为什么会这样?,java,Java,我只是在编写一个家庭作业程序,在这个程序中,我使用FileOutputStream将一些字符串写入文件。虽然它大部分工作正常,但出于某种原因,程序一直在文件开头插入一些奇怪的字符,而文件的其余部分看起来应该是这样的。我希望有人能帮我弄清楚这里发生了什么 这是我在主类中的代码: import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import j

我只是在编写一个家庭作业程序,在这个程序中,我使用
FileOutputStream
将一些字符串写入文件。虽然它大部分工作正常,但出于某种原因,程序一直在文件开头插入一些奇怪的字符,而文件的其余部分看起来应该是这样的。我希望有人能帮我弄清楚这里发生了什么

这是我在主类中的代码:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author ChetSpalsky
 */
public class Writer {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {

    CarPlate carPlate1 = new CarPlate();
    carPlate1.setNumber("1098463");
    carPlate1.setState("CA");
    carPlate1.setColor("Blue");

    CarPlate carPlate2 = new CarPlate();
    carPlate2.setNumber("6371849");
    carPlate2.setState("MA");
    carPlate2.setColor("Red");

    CarPlate carPlate3 = new CarPlate();
    carPlate3.setNumber("5738402");
    carPlate3.setState("AZ");
    carPlate3.setColor("Green");

    String writeCarPlate1 = (carPlate1.getNumber() + " " + carPlate1.getState() + " " + carPlate1.getColor());
    String writeCarPlate2 = (carPlate2.getNumber() + " " + carPlate2.getState() + " " + carPlate2.getColor());
    String writeCarPlate3 = (carPlate3.getNumber() + " " + carPlate3.getState() + " " + carPlate3.getColor());

    try {
        ObjectOutputStream text = new ObjectOutputStream(new FileOutputStream("dataOutput.txt", false));

        PrintWriter pw = new PrintWriter(text);

        pw.println(writeCarPlate1);
        pw.println(writeCarPlate2);
        pw.println(writeCarPlate3);
        pw.flush();

    } catch (FileNotFoundException ex) {
        Logger.getLogger(Writer.class.getName()).log(Level.SEVERE, null, ex);
    } catch (IOException ex) {
        Logger.getLogger(Writer.class.getName()).log(Level.SEVERE, null, ex);
    }

}

}
请注意,我知道,
InputStream
imports现在没有使用,我计划稍后在程序中使用它们,我已经尝试注释它们并再次运行程序,尽管这没有任何区别

为了以防万一,下面是定义
CarPlate
对象的
CarPlate
类中的代码:

public class CarPlate {
    private String number;
    private String state;
    private String color;

    public CarPlate() {

    }

    public CarPlate(String number, String state, String color) {
        this.number = number;
        this.state = state;
        this.color = color;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }
}
最后,这里是文本文件的输出:

Ì�w01098463钙蓝

6371849毫安红色

5738402 AZ绿

我只希望文本文件是:

01098463钙蓝

6371849毫安红色

5738402 AZ绿


我真的很感谢你们的帮助,谢谢你们

您使用的是ObjectOutputStream,它将某些信息预先添加到文件中:

只需使用PrintWriter或FileOutputStream写入文件,除非您试图写入对象

PrintWriter pw = new PrintWriter(new File("dataoutput.txt"));

不要使用FileOutputStream来写入文件,而应该尝试使用

BufferedWriter writer = new BufferedWriter( new FileWriter( yourfilename));
writer.write( yourstring);

@user2494817。如果要保存对象的状态,必须使用ObjectOutputStream将对象序列化为所需的文件。如果您想输入简单可读的文本,可以只使用FiletOutputStream。如果您有不可读的文本,带有带有特殊字符的奇怪字符集,我认为使用bufferedWriter是这一阶段最好的方法。