@Test public void TestObjectOutputStream() throws IOException{ String name = "John Smith"; //创建文件输出流对象,将数据写入name.txt FileOutputStream fos=new FileOutputStream("src/test11/name.txt",true); //创建对象输出流输出对象 ObjectOutputStream oos=new ObjectOutputStream(fos); oos.writeObject(name); oos.flush(); oos.close(); }这个代码为什么会多出来一行乱码
时间: 2024-03-22 08:40:42 浏览: 11
这个问题的原因可能是由于你设置了文件输出流的追加模式,即在原有文件内容的基础上继续写入新的内容,导致文件中存在多个序列化对象,而读取时只读取了第一个对象,后面的对象无法正确反序列化,因此会出现乱码。建议将文件输出流的追加模式去掉,或者在读取文件时使用循环读取所有序列化对象。另外,当你在写入对象时,应该在程序结束时关闭文件输出流和对象输出流。
相关问题
(2)用FileOutputStream对象写文件 public class FileOutputStreamDemo2 //在函数内部不进行异常处理,将异常抛出函数外部 public static void main(Stringl] args) throws Exception String str = "I Love Java", //通过文件名创建文件输出流对象 FileOutputStream fos = new FileOutputStream("test.txt"); //将字符串转化为字节数细 byteü buffer=(代码3) //将字节数组中包含的数据一次性写入到文件中 (代码4); 1/关闭流 fos.close0);}}
代码3应该是:
```java
byte[] buffer = str.getBytes();
```
代码4应该是:
```java
fos.write(buffer);
```
完整代码如下:
```java
import java.io.FileOutputStream;
public class FileOutputStreamDemo2 {
// 在函数内部不进行异常处理,将异常抛出函数外部
public static void main(String[] args) throws Exception {
String str = "I Love Java";
// 通过文件名创建文件输出流对象
FileOutputStream fos = new FileOutputStream("test.txt");
// 将字符串转化为字节数组
byte[] buffer = str.getBytes();
// 将字节数组中包含的数据一次性写入到文件中
fos.write(buffer);
// 关闭流
fos.close();
}
}
```
注意:这段代码会在当前工程的根目录下生成一个名为“test.txt”的文件,并将“I Love Java”写入到该文件中。如果文件已经存在,则会覆盖原文件。
补全代码public class MongoDBlest i private MongoClient mongoClient; @Before //注解before表示在方法前执行 public void initMongoClient() throws IOException { mongoClient = MongoDBUtil.__ (1)_; @Test(timeout = 1000) // timeout表示该测试方法执行超过1s会抛出异常 public void saveClicksLogTest() throws llegalArgumentException, llgalAccessException Document (2)__ = ConvertUtil.convertDoc(this.initClicksQ); mongoClient.getDatabase("ClicksLogTest")_ (3)_ ("clicksLog") .insertOne( (4)_ ); @Test public void queryClicksLogTest0 { long count = mongoClient___ (5)_ ("ClicksLogTest") .getCollection("clicksLog").count(new Document("clickPosition", "p 001)); System.out.printn( (6)__ ); @After public void closeMongoClient0 { mongoClient.__ (7)_ ; private ClicksLog initClicks() { ClicksLog clicksLog = new ClicksLog0; clicksL og.setClickPosition("p_ 001"); clicksLog.setPageCode(" page_ 001"); clicksLog.setPageContent("广告页面"); clicksLog.setUl("http://test.ad.com"); return . (8) }
public class MongoDBTest {
private MongoClient mongoClient;
@Before //注解before表示在方法前执行
public void initMongoClient() throws IOException {
mongoClient = MongoDBUtil.getMongoClient(); //1.补全代码,获取MongoClient连接对象
}
@Test(timeout = 1000) // timeout表示该测试方法执行超过1s会抛出异常
public void saveClicksLogTest() throws IllegalArgumentException, IllegalAccessException {
Document doc = ConvertUtil.convertDoc(this.initClicks()); //2.补全代码,将ClicksLog对象转换为Document对象
mongoClient.getDatabase("ClicksLogTest") //3.补全代码,获取ClicksLogTest数据库
.getCollection("clicksLog") //4.补全代码,获取clicksLog集合
.insertOne(doc); //4.补全代码,插入文档
}
@Test
public void queryClicksLogTest() {
long count = mongoClient.getDatabase("ClicksLogTest") //5.补全代码,获取ClicksLogTest数据库
.getCollection("clicksLog") //5.补全代码,获取clicksLog集合
.count(new Document("clickPosition", "p 001")); //5.补全代码,查询文档数量
System.out.println(count); //6.补全代码,输出文档数量
}
@After
public void closeMongoClient() {
mongoClient.close(); //7.补全代码,关闭MongoClient连接对象
}
private ClicksLog initClicks() {
ClicksLog clicksLog = new ClicksLog();
clicksLog.setClickPosition("p_001");
clicksLog.setPageCode("page_001");
clicksLog.setPageContent("广告页面");
clicksLog.setUrl("http://test.ad.com");
return clicksLog; //8.补全代码,返回ClicksLog对象
}
}