2016-05-14 2 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

Если вы сериализовать объект в файл, вы символы бросовые в нем как это не обычный текстовый файл. Если вы хотите получить доступный для чтения файл, вы можете преобразовать объект в нечто значимое, как json string, используя ObjectMapper и записать строку json в файл.

Смежные вопросы