Запись объектов в выходные текстовые файлы

Мы тестируем 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);
                }
    }
}

1 ответ

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

Другие вопросы по тегам