0

ObjectInputStream ve ObjectOutputStream nesneleri ile Serialize Örneği ( Java Kurs Notları)

JavaFx ileObjectInputStream veObjectOutputStream nesnelerini kullanarak oluşturduğumuz formdaki bilgileri bir dosyaya kaydediyoruz. Formumuzda  bir tableview var buna bağlı bir observablelistimiz var. ObservableList’imizi doğrudan serialize edemediğimiz için bir ArrayList’e atıp onu serialize edip dosyaya yazdırdık. Bazı bug’lar var ancak kaynak teşkili için paylaştım. kolay gelsin…..

package sample;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.*;
import javafx.scene.control.cell.PropertyValueFactory;


import java.net.URL;
import java.util.ResourceBundle;

public class Controller implements Initializable {


    @FXML
    TextField txtYas ,txtIsim;
    @FXML
    Button btnEkle,btnDosyayaKaydet,btnDosyadanOku;

    @FXML
    TableView<Kisi> kisilerTablosu;


    ObservableList<Kisi> kisiler= FXCollections.observableArrayList();

    DosyaIslemleri dosyaIslemleri=new DosyaIslemleri("kayitlar");


    @Override
    public void initialize(URL location, ResourceBundle resources) {

        TableColumn<Kisi, String> isimKolonu=new TableColumn<>("Isım");
        isimKolonu.setCellValueFactory(new PropertyValueFactory<>("isim"));
        isimKolonu.setPrefWidth(300);

        TableColumn<Kisi,Integer> yasKolunu=new TableColumn<>("Yaşı");
        yasKolunu.setCellValueFactory(new PropertyValueFactory<>("yas"));
        yasKolunu.setPrefWidth(200);

        kisilerTablosu.getColumns().addAll(isimKolonu,yasKolunu);
        kisilerTablosu.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);

        kisilerTablosu.setItems(kisiler);
        btnEkle.setDefaultButton(true);



        btnEkle.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {

                if(!txtIsim.getText().isEmpty() && !txtYas.getText().isEmpty()) {

                    if (kisiler.add(new Kisi(txtIsim.getText(), Integer.parseInt(txtYas.getText())))) {

                        txtIsim.clear();
                        txtYas.clear();
                        txtIsim.requestFocus();
                    }
                }
                else
                {
                mesajGoster("Lütfen Eksik Bırakmayın !","Eksik Bilgi ");

                }



            }
        });

        btnDosyayaKaydet.setOnAction(event -> {
          if(  dosyaIslemleri.listeyiKaydet(kisiler)){

              mesajGoster("Kayıt İşlemi Başarılı"," Başarılı İşlem ");

          }
          else
          {

              mesajGoster("Bir Şeyler hatalı gitti ","Dosya Kayıt Hatası");
          }

        });

        btnDosyadanOku.setOnAction(event -> {

            kisilerTablosu.setItems(dosyaIslemleri.kayitlariGetir());

        });

       

    }


    void  mesajGoster(String content, String header){

        Alert alert=new Alert(Alert.AlertType.INFORMATION);
        alert.setContentText(content);
        alert.setHeaderText(header);
        alert.showAndWait();
    }

}
package sample;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
        primaryStage.setTitle("Hello World");
        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }


    public static void main(String[] args) {
        launch(args);
    }
}
package sample;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;

import java.io.*;
import java.util.ArrayList;

public class DosyaIslemleri {

    String dosyaAdi;

    File file=null;

    public DosyaIslemleri(String dosyaAdi){

    this.dosyaAdi=dosyaAdi;

    if(dosyaAdi!=null){
        dosayiOlustur(this.dosyaAdi);
    }

    }

    private void dosayiOlustur(String dosyaAdi) {

        file=new File(dosyaAdi);

        if(!file.exists()){
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public boolean listeyiKaydet(ObservableList<Kisi> kisiler){

        boolean sonuc=false;
        FileOutputStream fis= null;
        ObjectOutputStream objectOutputStream=null;
        try {
            fis = new FileOutputStream(this.file);
             objectOutputStream=new ObjectOutputStream(fis);

            for (Kisi k: kisiler
                 ) {
                objectOutputStream.writeObject(k);
            }

            sonuc=true;

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        finally
        {

            try {
                fis.close();
                objectOutputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


        return  sonuc;
    }

    public ObservableList<Kisi> kayitlariGetir(){
        ObservableList<Kisi> kisiler= FXCollections.observableArrayList();


        try {
            FileInputStream fis=new FileInputStream(file);
            ObjectInputStream objectInputStream=new ObjectInputStream(fis);

           Kisi kisi= (Kisi) objectInputStream.readObject();

           while (kisi!=null){

               kisiler.add(kisi);
               kisi= (Kisi) objectInputStream.readObject();
           }



        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (EOFException e)
        {

        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }



        return kisiler;
    }


}
package sample;

import java.io.Serializable;

public class Kisi implements Serializable {

    private long serialVersionUID=3L;

    String isim;
    int yas;

    public String getIsim() {
        return isim;
    }

    public void setIsim(String isim) {
        this.isim = isim;
    }

    public int getYas() {
        return yas;
    }

    public void setYas(int yas) {
        this.yas = yas;
    }

    public Kisi(String isim, int yas) {
        this.isim = isim;
        this.yas = yas;
    }
}
<?import javafx.geometry.Insets?>
<?import javafx.scene.layout.GridPane?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ToggleButton?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.layout.HBox?>
<GridPane fx:controller="sample.Controller"
          xmlns:fx="http://javafx.com/fxml" alignment="TOP_CENTER" hgap="10" vgap="10" prefWidth="800"


          prefHeight="750">

    <padding>
        <Insets top="40" ></Insets>
    </padding>

    <Label text="İsiminiz"  GridPane.columnIndex="0" GridPane.rowIndex="0"></Label>
    <TextField GridPane.rowIndex="0" GridPane.columnIndex="1" fx:id="txtIsim"></TextField>
    <Label text="Yaş" GridPane.columnIndex="0" GridPane.rowIndex="1"></Label>
    <TextField GridPane.columnIndex="1" GridPane.rowIndex="1" fx:id="txtYas"></TextField>

    <Button fx:id="btnEkle" GridPane.rowIndex="2" GridPane.columnIndex="1" text="Kaydet" GridPane.halignment="RIGHT"></Button>

    <TableView fx:id="kisilerTablosu" GridPane.columnIndex="0" GridPane.columnSpan="2" GridPane.rowIndex="3" prefWidth="500"></TableView>

    <HBox alignment="CENTER_RIGHT" GridPane.rowIndex="4" GridPane.columnSpan="2"  GridPane.columnIndex="1" GridPane.halignment="RIGHT" spacing="20">
        <Button fx:id="btnDosyayaKaydet" text="Dosyaya Kaydet" ></Button>

        <Button fx:id="btnDosyadanOku" text="Dosyadan Oku"></Button>


    </HBox>



</GridPane>

 

admin

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir