الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة في مثال القراءة من الملفات

بدأه Muhammed Magdy في 3 نوفمبر 2014 · 10 رد · 2,068 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته


 


أحاول تطبيق مثال القراءة من الملفات ، المشكلة في هذا الجزء


 


FileReader01_zps59a23fac.png


 


الأكواد


import java.awt.BorderLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileFilter;

import java.io.FileReader;

import javax.swing.BorderFactory;

import javax.swing.JButton;

import javax.swing.JFileChooser;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

import javax.swing.JToolBar;

import javax.swing.filechooser.FileNameExtensionFilter;


/**

 *

 * @author Muhammed_Pro

 */

public class FileChooser01 extends JFrame {


    JPanel p;

    JTextArea ta;


    public FileChooser01() {

        p = new JPanel(new BorderLayout());

        JToolBar tb = new JToolBar();

        JButton b = new JButton("Open");

        b.addActionListener(new ActionListener() {


            @Override

            public void actionPerformed(ActionEvent e) {

                JFileChooser fc = new JFileChooser();

                FileNameExtensionFilter ff = new FileNameExtensionFilter(".txt", "txt");

                fc.addChoosableFileFilter(ff);


                int er = fc.showDialog(p, "Open file");

                if (er == JFileChooser.APPROVE_OPTION)

                  File f = fc.getSelectedFile();

                String text = ReadFile(f);

                ta.setText(text);

            }

        });


        ta = new JTextArea();

        ta.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));

        tb.add(b);


        JScrollPane sc = new JScrollPane();

        sc.getViewport().add(ta);


        p.add(sc);

        p.add(ta);

        p.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));


        add(p);

        add(tb, BorderLayout.NORTH);


        setVisible(true);

        setSize(400, 400);

        setLocationRelativeTo(null);

        setDefaultCloseOperation(3);

    }


    public String ReadFile(File f) {

        StringBuffer fb;

        String FileString, Line;

        try {

            FileReader fr = new FileReader(f);

            BufferedReader brd = new BufferedReader(fr);


            fb = new StringBuffer();

            while ((Line = brd.readLine()) != null) {

                fb.append(Line+System.getProperty("Line.seprator"));

            }

            fr.close();

            FileString = fb.toString();

        } catch (Exception e) {

            return null;

        }

        return FileString;


    }

}

#2

هذا مثال يؤدي المطلوب، كتبته لك، أرجو أن يُفيدك :)

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import javax.swing.*;

public class ReadingTextFile extends JFrame implements ActionListener {

    Container contenu;
    JButton ouvrir;
    JLabel chemin;
    JTextArea text;

    public ReadingTextFile(String titre) {
        this.setTitle(titre);
        this.setSize(500, 300);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.initComponents();
    }

    private void initComponents() {
        contenu = this.getContentPane();
        JPanel pan = new JPanel();
        ouvrir = new JButton("Lecture");
        ouvrir.addActionListener(this);
        pan.add(ouvrir);
        contenu.add(pan, BorderLayout.NORTH);
        chemin = new JLabel("Aucun fichier selectionné");
        chemin.setOpaque(true);
        chemin.setBackground(Color.CYAN);
        contenu.add(chemin, BorderLayout.SOUTH);
        text = new JTextArea();
        text.setEditable(false);
        Font font = new Font("Courier New", Font.BOLD, 12);
        text.setFont(font);
        text.setBackground(Color.ORANGE);
        JScrollPane js = new JScrollPane(text);
        contenu.add(js, BorderLayout.CENTER);
    }

    private void ouvrirFichierEnLecture() {
        JFileChooser choix = new JFileChooser();

        int retour = choix.showOpenDialog(this);
        if (retour == JFileChooser.APPROVE_OPTION) {
            File f = new File(choix.getSelectedFile().getAbsolutePath());
            lireFichier(f);
            chemin.setText(choix.getSelectedFile().getAbsolutePath());
        }
    }

    private void lireFichier(File nom) {
        try {
            FileReader fichier = new FileReader(nom);
            BufferedReader buffer = new BufferedReader(fichier);
            String ligne_lue = buffer.readLine();
            StringBuilder texte = new StringBuilder();
            while (ligne_lue != null) {
                texte.append(ligne_lue).append("\r\n");
                ligne_lue = buffer.readLine();
            }
            text.setText(texte.toString());
            buffer.close();
            fichier.close();
        } catch (FileNotFoundException ex) {
            System.out.println("Fichier introuvable !");
        } catch (IOException ex) {
            System.out.println("Erreur d'entrée-sortie !");
        }
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == ouvrir) {
            ouvrirFichierEnLecture();
        }
    }

    public static void main(String args[]) {
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (ClassNotFoundException | InstantiationException |
                IllegalAccessException | UnsupportedLookAndFeelException ex1) {
            JOptionPane.showMessageDialog(null, "Erreur, Impossible de charger le Look And Feel du système",
                    "Chargement échoué", JOptionPane.ERROR_MESSAGE, null);
        }
        new ReadingTextFile("File Reader").setVisible(true);
    }
}

واجهة البرنامج :

post-219439-0-88467400-1414972288_thumb.

 

بالتوفيق.

1
#3
Snack3r كتب:

هذا مثال يؤدي المطلوب، كتبته لك، أرجو أن يُفيدك :)

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import javax.swing.*;

public class ReadingTextFile extends JFrame implements ActionListener {

    Container contenu;
    JButton ouvrir;
    JLabel chemin;
    JTextArea text;

    public ReadingTextFile(String titre) {
        this.setTitle(titre);
        this.setSize(500, 300);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.initComponents();
    }

    private void initComponents() {
        contenu = this.getContentPane();
        JPanel pan = new JPanel();
        ouvrir = new JButton("Lecture");
        ouvrir.addActionListener(this);
        pan.add(ouvrir);
        contenu.add(pan, BorderLayout.NORTH);
        chemin = new JLabel("Aucun fichier selectionné");
        chemin.setOpaque(true);
        chemin.setBackground(Color.CYAN);
        contenu.add(chemin, BorderLayout.SOUTH);
        text = new JTextArea();
        text.setEditable(false);
        Font font = new Font("Courier New", Font.BOLD, 12);
        text.setFont(font);
        text.setBackground(Color.ORANGE);
        JScrollPane js = new JScrollPane(text);
        contenu.add(js, BorderLayout.CENTER);
    }

    private void ouvrirFichierEnLecture() {
        JFileChooser choix = new JFileChooser();

        int retour = choix.showOpenDialog(this);
        if (retour == JFileChooser.APPROVE_OPTION) {
            File f = new File(choix.getSelectedFile().getAbsolutePath());
            lireFichier(f);
            chemin.setText(choix.getSelectedFile().getAbsolutePath());
        }
    }

    private void lireFichier(File nom) {
        try {
            FileReader fichier = new FileReader(nom);
            BufferedReader buffer = new BufferedReader(fichier);
            String ligne_lue = buffer.readLine();
            StringBuilder texte = new StringBuilder();
            while (ligne_lue != null) {
                texte.append(ligne_lue).append("\r\n");
                ligne_lue = buffer.readLine();
            }
            text.setText(texte.toString());
            buffer.close();
            fichier.close();
        } catch (FileNotFoundException ex) {
            System.out.println("Fichier introuvable !");
        } catch (IOException ex) {
            System.out.println("Erreur d'entrée-sortie !");
        }
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == ouvrir) {
            ouvrirFichierEnLecture();
        }
    }

    public static void main(String args[]) {
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (ClassNotFoundException | InstantiationException |
                IllegalAccessException | UnsupportedLookAndFeelException ex1) {
            JOptionPane.showMessageDialog(null, "Erreur, Impossible de charger le Look And Feel du système",
                    "Chargement échoué", JOptionPane.ERROR_MESSAGE, null);
        }
        new ReadingTextFile("File Reader").setVisible(true);
    }
}

واجهة البرنامج :

attachicon.gifdemo.jpg

 

بالتوفيق.

جزاك الله خيراً ، بالنسبة لقراءة اللغة العربية ظهرت عندي مربعات ما حلها ؟

إستفسار آخر عن واجهة ال FileChooser عند عمل JFileChooser جديد يظهر بالشكل الإفتراضي

 

JFileChooser01_zpsdf645d06.png

 

كيف أجعله يظهر بهذا الشكل ؟

 

JFileChooser02_zps4ce750d0.png

#4
اقتباس

 

بالنسبة لقراءة اللغة العربية ظهرت عندي مربعات ما حلها ؟

قم بتغيير الـ encoding إلى UTF8.

 

اقتباس
عند عمل JFileChooser جديد يظهر بالشكل الإفتراضي، كيف أجعله يظهر بهذا الشكل ؟

شكل مكونات Swing يتغير طبيعة حسب الـ Look and Feel.

الشكل الأول عبارة عن الـ File dialog تبع الـ Nimbus و هو الذي كان مُعتمداً في ويندوز 3 في التسعينيات أما الشكل الثاني فهو الشكل الحديث للويندوز، للحصول على الأخير، قم بتغيير الـ L&F إلى UIManager.getSystemLookAndFeelClassName.

#5
Snack3r كتب:

قم بتغيير الـ encoding إلى UTF8.

 

شكل مكونات Swing يتغير طبيعة حسب الـ Look and Feel.

الشكل الأول عبارة عن الـ File dialog تبع الـ Nimbus و هو الذي كان مُعتمداً في ويندوز 3 في التسعينيات أما الشكل الثاني فهو الشكل الحديث للويندوز، للحصول على الأخير، قم بتغيير الـ L&F إلى UIManager.getSystemLookAndFeelClassName.

لم أستطع تغيير ال encoding في المثال ، كيف أغيره ؟

قرأت هذة الجملة Look and Feel. عند الإنشاء بطريقة Drag & Drop ممكن تقولي كيف أغيرها بالكود ؟

#6
اقتباس

 

لم أستطع تغيير ال encoding في المثال ، كيف أغيره ؟

حاول البحث أولا، يُمكن أن أعطيك الحل لكن لن تستفيد بهذه الطريقة.

يجب أن تتعود على البحث عن حلول للمشاكل التي تتعرض لها سواء كنت تبحث عن اسم دالة أو مكتبة مُعينة أو الطريقة الأفضل لكتابة خوارزمية .. إلخ

 

اقتباس

 

قرأت هذة الجملة Look and Feel. عند الإنشاء بطريقة Drag & Drop ممكن تقولي كيف أغيرها بالكود ؟

الطريقة موجودة في الكود الذي أرفقته لك في أول مشاركة !! :)

تم تعديل هذه المشاركة بواسطة Snack3r في 4 نوفمبر 2014 في 00:43

#7
Snack3r كتب:

حاول البحث أولا، يُمكن أن أعطيك الحل لكن لن تستفيد بهذه الطريقة.

يجب أن تتعود على البحث عن حلول للمشاكل التي تتعرض لها سواء كنت تبحث عن اسم دالة أو مكتبة مُعينة أو الطريقة الأفضل لكتابة خوارزمية .. إلخ

وجدت هذة الدالة و أضفتها ولكن نفس المشكلة

InputStreamReader inputStreamReader = new InputStreamReader(
  new FileInputStream(nom), "UTF8");

ربما أكون أضفتها بطريقة خاطئة ، أتمنى أن تشرحلي الطريقة

#8

أخي الكريم، أعتقد أنك لم تُحاول أن تفهم الكود الذي كتبتُه لك في أول مشاركة لأن أجوبة كل الأسئلة التي تطرحها موجودة في الكود !!

 

انظر الصورة :

post-219439-0-49020200-1415100052_thumb.

#9
Snack3r كتب:

أخي الكريم، أعتقد أنك لم تُحاول أن تفهم الكود الذي كتبتُه لك في أول مشاركة لأن أجوبة كل الأسئلة التي تطرحها موجودة في الكود !!

يا أخي في الأول أعطيتني أكواد وقلت لي تقوم بالمطلوب بدل من أن تفهمني ما الخطأ في أكوادي الموجودة بالموضوع الرئيسي ، ثانياً لم أفهم بعض المصطلحات باللغة الفرنسية ولما حاولت أن أفهم أكوادك قلت لي حاول البحث أولا ولما بحثت قلت لي إن الحل موجود في الكود ! ، إذا كنت تريديني أن أفهم الطريقة أرجو أن تجيبني عن ما الخطأ أو الناقص في الكود الخاص بي

#10

الخطأ في الكود تبعك هو عدم وضع قطعة الكود التالية بين معكوفتين

File f = fc.getSelectedFile();
String text = ReadFile(f);
ta.setText(text);

و هذا الكود بعد التصحيح :

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;

/**
 *
 * @author Muhammed_Pro
 */
public class FileChooser01 extends JFrame {

    JPanel p;
    JTextArea ta;

    public FileChooser01() {
        p = new JPanel(new BorderLayout());
        JToolBar tb = new JToolBar();
        JButton b = new JButton("Open");
        b.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                JFileChooser fc = new JFileChooser();
                FileNameExtensionFilter ff = new FileNameExtensionFilter(".txt", "txt");
                fc.addChoosableFileFilter(ff);

                int er = fc.showDialog(p, "Open file");
                if (er == JFileChooser.APPROVE_OPTION) {
                    File f = fc.getSelectedFile();
                    String text = ReadFile(f);
                    ta.setText(text);
                }
            }
        });

        ta = new JTextArea();
        ta.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
        tb.add(b);

        JScrollPane sc = new JScrollPane();
        sc.getViewport().add(ta);

        p.add(sc);
        p.add(ta);
        p.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));

        add(p);
        add(tb, BorderLayout.NORTH);

        setVisible(true);
        setSize(400, 400);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(3);
    }

    public String ReadFile(File f) {
        StringBuffer fb;
        String FileString, Line;
        try {
            FileReader fr = new FileReader(f);
            BufferedReader brd = new BufferedReader(fr);

            fb = new StringBuffer();
            while ((Line = brd.readLine()) != null) {
                fb.append(Line).append(System.getProperty("Line.seprator"));
            }
            fr.close();
            FileString = fb.toString();
        } catch (Exception e) {
            return null;
        }
        return FileString;
    }

    public static void main(String... args) {
        new FileChooser01();
    }
}
#11

قم باضافة الكود التالي الذي قمت انا شخصيا باستخدامه من قبل 3 سنوات

    	//-----------------------------Look&Feel---------------------------------------------//
        try {
            // Set System L&F
            UIManager.setLookAndFeel(
                UIManager.getSystemLookAndFeelClassName());
        }
        catch (UnsupportedLookAndFeelException e) {
            // handle exception
        }
        catch (ClassNotFoundException e) {
            // handle exception
        }
        catch (InstantiationException e) {
            // handle exception
        }
        catch (IllegalAccessException e) {
            // handle exception
        }
      //------------------------------------------------------------------------------------//

ستحصل على الشكل الجميل الذي أردته

بالتوفيق

1

إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً         فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ


 


 


رسم المخططات البيانية بواسطة الجافا


 


كتاب تحليل وتصميم نظم المعلومات


مواضيع مشابهة