2016-05-14 90 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字符串寫入文件。