Maison  >  Article  >  Java  >  Comment utiliser DataInputStream et DataOutputStream de Java

Comment utiliser DataInputStream et DataOutputStream de Java

WBOY
WBOYavant
2023-04-28 18:40:161782parcourir

Introduction

Dans le package io, deux flux d'opérations de données indépendants de la plate-forme sont fournis : le flux de sortie de données (DataOutputStream) et le flux d'entrée de données (DataInputStream).

Habituellement, le flux de sortie de données produira les données dans un certain format, puis les données seront lues dans un certain format via le flux d'entrée de données. DataOutputStream et DataOutputStream sont utilisés pour lire et écrire des données au format d'octet fixe.

DataOutputStream

Créer un objet

DataOutputStream out = new DataOutputStream(相接的流)

MéthodeÉcrivez des données de type int dans le flux de sortie de données, et la couche inférieure écrit 4 octets dans le flux de sortie de base

writeInt(int i)

Écrivez des données de type double dans la sortie de données stream, la couche inférieure convertira le double en un type long, l'écrira dans le flux de sortie de base et produira 8 octets

writeDouble(double d)

Utilisation du codage utf-8 de manière indépendante de la machine pour écrire la chaîne dans le flux de sortie de base. Générez d'abord 2 octets représentant la longueur en octets de la chaîne, puis affichez ces valeurs d'octets

writeUTF()

DataInputStream

Créer un objet

DataInputStream dis = new DataInputStream(InputStream in);

MéthodeLire des données de type int à partir du flux d'entrée de données, lire 4 octets

readInt()

Lire 8 octets

readDouble()

Lisez d'abord 2 octets pour déterminer la longueur en octets de la chaîne, puis lisez ces valeurs d'octets

readUTF()

Conseils :Fin de la lecture, une exception EOF se produira lors de la nouvelle lecture

Chestnut 1 : Écriture des données

public class Main {
    public static void main(String[] args) throws Exception {
        DataOutputStream out = new DataOutputStream(new FileOutputStream("d:/abc/f5"));
        out.writeInt(20211011);
        out.writeUTF("晴,18度");
        out.writeInt(20211012);
        out.writeUTF("晴,19度");
        out.writeInt(20211013);
        out.writeUTF("多云,17度");
        out.close();
    }
}

Résultats d'exécution :

Comment utiliser DataInputStream et DataOutputStream de Java

Chestnut 2 : Lecture

public class Main {
    public static void main(String[] args) throws Exception {
        DataInputStream in = new DataInputStream(new FileInputStream("d:/abc/f5"));
        try {
            while (true) {
                int date = in.readInt();
                String s = in.readUTF();
                System.out.println(date);
                System.out.println(s);
            }
        } catch (EOFException e) {
            //正确读取结束,不需要处理
        }
        in.close();
    }
}

Résultats d'exécution :

Comment utiliser DataInputStream et DataOutputStream de Java

Chestnut 3 : Sauvegarde des informations sur les élèves

Obligatoire pour enregistrer les informations sur les élèves dans les éléments suivants format

Numéro d'étudiant 00 00 00 01
Nom 00 03 61 62 63
Sexe 00 61
Âge 00 00 00 16

xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="20dp">
    <EditText
        android:id="@+id/et1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="学号" />
    <EditText
        android:id="@+id/et2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="姓名" />
    <EditText
        android:id="@+id/et3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="性别" />

    <EditText
        android:id="@+id/et4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="年龄" />

    <Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="保存" />
    <Button
        android:id="@+id/btn2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="读取" />
    <TextView
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp" />
</LinearLayout>

java

public class IoActivity extends AppCompatActivity {
    private EditText et1;
    private EditText et2;
    private EditText et3;
    private EditText et4;
    private Button btn1;
    private Button btn2;
    private TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_io);
        setViews();
        setListeners();
    }
    private void setViews() {
        et1 = findViewById(R.id.et1);
        et2 = findViewById(R.id.et2);
        et3 = findViewById(R.id.et3);
        et4 = findViewById(R.id.et4);
        btn1 = findViewById(R.id.btn1);
        btn2 = findViewById(R.id.btn2);
        tv = findViewById(R.id.tv);
    }
    private void setListeners() {
        btn1.setOnClickListener(view -> baocun());
        btn2.setOnClickListener(view -> duqu());
    }
    private void baocun() {
        //IO操作有IO异常,所以进行try...catch...
        /*
         *
         *           ┌DataOutputStream
         *    ┌FileOutputStream
         * sdcard
         */
        try {
            int id = Integer.parseInt(et1.getText().toString());
            String name = et2.getText().toString();
            String gender = et3.getText().toString();
            int age = Integer.parseInt(et4.getText().toString());

            DataOutputStream out = new DataOutputStream(
                    new FileOutputStream(getExternalFilesDir(null) + "/stu.txt", true)
            );
            out.writeInt(id);
            out.writeUTF(name);
            out.writeChar(gender.charAt(0));
            out.writeInt(age);
            out.close();

            Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show();
        } catch (Exception e) {
            Toast.makeText(this, "保存失败", Toast.LENGTH_SHORT).show();
            e.printStackTrace();
        }
    }

    private void duqu() {
        //IO操作有IO异常,所以进行try...catch...
        try {
            DataInputStream in = new DataInputStream(
                    new FileInputStream(getExternalFilesDir(null) + "/stu.txt")
            );

            try {
                tv.setText("");
                while (true) {
                    int id = in.readInt();
                    String name = in.readUTF();
                    char gender = in.readChar();
                    int age = in.readInt();
                    tv.append("id:" + id + "\n" + "name:" + name + "\n" + "gender:" + gender + "\n" + "age:" + age + "\n");
                }
            } catch (EOFException e) {

            }
            in.close();
            Toast.makeText(this, "读取成功", Toast.LENGTH_SHORT).show();
        } catch (Exception e) {
            Toast.makeText(this, "读取失败", Toast.LENGTH_SHORT).show();
            e.printStackTrace();
        }
    }
}

Exécutez le programme :

Comment utiliser DataInputStream et DataOutputStream de Java

Cliquez sur le bouton de lecture :

Comment utiliser DataInputStream et DataOutputStream de Java

getExternalFilesDir(null)obtenir le chemin suivant

/storage/emulated/0/Android/data/yourPackageName/files

Ce répertoire sera dans L'application est supprimée lors de sa désinstallation , et l'accès à ce répertoire ne nécessite pas d'application dynamique pour les autorisations de STOCKAGE.

Donc, l'exécution du programme générera un fichier stu.txt dans ce chemin

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer