2016-05-14 92 views
0

我们正在测试一个我们想直接编写对象的java程序,所以我们实现了以下测试文件,但不幸的是我们得到的文件中有未知字符,我们如何避免这个问题,我们也希望如果你将对象序列化到一个文件,你会在它的垃圾字符写入其中包含其属性的对象以纯文本格式和输出返回一个空文件,其他文件..将对象写入输出文本文件

import java.util.ArrayList; 
import java.util.Scanner; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.ObjectOutputStream; 
import java.io.PrintWriter; 

public class AssignTest { 

    public static void main(String[] args) throws IOException { 

     FileOutputStream wo = new FileOutputStream("Assignment1.txt");//here we want the objects directly 
     ObjectOutputStream s = new ObjectOutputStream(wo); 


     FileWriter fw = new FileWriter("yami.txt");//while here we want the object with its attributes 
     PrintWriter pw = new PrintWriter(fw); 


     String fileName= "Assignment1.txt"; 
     try{ 
     ArrayList<Worker> Worker1 = new ArrayList<Worker>(); 
     Worker1.add(new SalariedWorker());// index 0 
     SalariedWorker sw = (SalariedWorker) Worker1.get(0);//explicit casting 
     Worker1.add(new SalariedWorker(1000.0));// index 1 
     SalariedWorker sw1 = (SalariedWorker) Worker1.get(1); 
     Worker1.add(new HourlyWorker());// index 2 
     HourlyWorker hw = (HourlyWorker) Worker1.get(2); 
     Worker1.add(new HourlyWorker(100.0));// index 3 
     HourlyWorker hw1 = (HourlyWorker) Worker1.get(3); 

     Scanner prompt = new Scanner (System.in); 
     System.out.println("Enter your monthly salary: "); 
     double monthlySalary = prompt.nextDouble(); 
     sw.setSalary(monthlySalary); 
     System.out.println("Your monthly Salary is: " +monthlySalary+" AED"); 
     System.out.println(sw.toString()); 

     System.out.println("Enter the Percentage Increase for a Salaried worker: "); 
     double PercentIncreaseS = prompt.nextDouble(); 
     sw.setpercentageIncrease(PercentIncreaseS); 
     sw.increasePayment(monthlySalary); 
     System.out.println(sw.toString(monthlySalary)); 

     System.out.println("Enter your hourly rate: "); 
     double HourlyRate = prompt.nextDouble(); 
     hw.setRate(HourlyRate); 
     System.out.println("Your Hourly Rate : "+HourlyRate+" AED"); 
     System.out.println(sw.toString()); 

     System.out.println("Enter the Percentage Increase for an Hourly worker: "); 
     double PercentIncreaseH = prompt.nextDouble(); 
     hw.setpercentageIncrease(PercentIncreaseH); 
     hw.increasePayment(HourlyRate); 
     System.out.println(hw.toString(HourlyRate)); 

     ObjectOutputStream os = new ObjectOutputStream (new FileOutputStream(fileName)); 
     os.close(); 

     s.writeObject(sw); 
     s.writeObject(hw); 


     pw.print(sw); 
     pw.print(hw); 

     } 
     catch (ArithmeticException ax){ 
     System.out.println(ax); 
       } 
     catch (IOException ex){ 
     System.out.println(ex); 
       } 
    } 
} 
+0

请提供[一个最小,完整和可验证的示例](http://stackoverflow.com/help/mcve)以及如何运行它的指示(需要发送到标准输入的东西?),检查您期望的结果与您收到的结果之间的结果和差异。这将有助于社区了解问题以及如何解决问题。 – yeputons

回答

1

这不是一个纯文本文件。如果你想要人类可读的文件,你可以使用ObjectMapper将对象转换为像json字符串这样有意义的东西,然后将json字符串写入文件。