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

طرق قراءة الملف

بدأه mr.beshoy في 7 مايو 2010 · 3 رد · 990 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

سلام للجميع ..

--------------------

هناك طريقتين - ربما أكثر- أعرفهم لقراءة ملفات من نوع .txt

1 - استعمال الفئة FileInputStream و هو يأخذ الملف المُراد قراءته ، ثم يمُرر للفئة BufferedInputStream و به الدالة read() من خلاله تقرأ الملف .

2 -استعمال الفئة FileInputStream و هو يأخذ الملف المُراد قراءته ، ثم يمُرر للفئة InputStreamReader - يعمل كقنطرة بين ال byte Stream and char stream - الذى بدوره يُمرر للفئة

BufferedReader

--------------------------------------------------------------------------------

المشهد الأول :

-----------------------

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;

public class FileChooserTest extends JFrame {

    private JButton button;
    private JPanel panel;
    private JFileChooser fileChooser;
    private File file = null;
    private JTextArea area;
    private FileInputStream fileInputStream = null;
    private BufferedInputStream bufferedInputStream = null;

    public FileChooserTest() {
        fileChooser = new JFileChooser();
        area = new JTextArea(50, 60);
        ///////////////////////////////////////////////
        panel = new JPanel(new FlowLayout());
        button = new JButton("open");
        panel.add(button);
        panel.add(area);
        getContentPane().add(panel, BorderLayout.CENTER);
        ////////////////////////////////////////////////
        fileChooser.setSelectedFile(new File(".txt"));
        button.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                int returnValue = fileChooser.showOpenDialog(FileChooserTest.this);
                if (returnValue == JFileChooser.APPROVE_OPTION) {
                    file = fileChooser.getSelectedFile();
                    int i;
                    try {
                        fileInputStream = new FileInputStream(file);
                        bufferedInputStream = new BufferedInputStream(fileInputStream);
                        StringBuilder stringBuilder = new StringBuilder();
                        try {
                            while ((i = bufferedInputStream.read()) != -1) {
                                stringBuilder.append((char) i);
                            }
                            area.setText(stringBuilder.toString());
                        } catch (IOException ex) {
                            ex.printStackTrace();
                        }
                    } catch (FileNotFoundException ex) {
                        ex.printStackTrace();
                    }

                }
            }
        });
    }

    public static void main(String[] args) {
        FileChooserTest fileChooserTest = new FileChooserTest();
        fileChooserTest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fileChooserTest.setSize(new Dimension(600, 300));
        fileChooserTest.setLocationRelativeTo(null);
        fileChooserTest.setVisible(true);

    }
}

---------------------------------------

المشهد الثانى :

-----------------------

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;

public class FileChooserTest extends JFrame {

    private JButton button;
    private JPanel panel;
    private JFileChooser fileChooser;
    private File file = null;
    private JTextArea area;
    private FileInputStream fileInputStream = null;
    private BufferedReader bufferedReader = null;

    public FileChooserTest() {
        fileChooser = new JFileChooser();
        area = new JTextArea(50, 60);
        ///////////////////////////////////////////////
        panel = new JPanel(new FlowLayout());
        button = new JButton("open");
        panel.add(button);
        panel.add(area);
        getContentPane().add(panel, BorderLayout.CENTER);
        ////////////////////////////////////////////////
        fileChooser.setSelectedFile(new File(".txt"));
        button.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                int returnValue = fileChooser.showOpenDialog(FileChooserTest.this);
                if (returnValue == JFileChooser.APPROVE_OPTION) {
                    file = fileChooser.getSelectedFile();
                    String text;
                    try {
                        fileInputStream = new FileInputStream(file);
                        bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream));
                        StringBuilder textBuilder = new StringBuilder();
                        try {
                            while ((text = bufferedReader.readLine()) != null) {
                                textBuilder.append(text);
                            }
                            area.setText(textBuilder.toString());
                        } catch (IOException ex) {
                            ex.printStackTrace();
                        }
                    } catch (FileNotFoundException ex) {
                        ex.printStackTrace();
                    }

                }
            }
        });
    }

    public static void main(String[] args) {
        FileChooserTest fileChooserTest = new FileChooserTest();
        fileChooserTest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fileChooserTest.setSize(new Dimension(600, 300));
        fileChooserTest.setLocationRelativeTo(null);
        fileChooserTest.setVisible(true);

    }
}

و من لديه طرق أخرى يتحفُنا بها :)

-----------------------------------------

الرجاء من الإخوة المشرفين تغير العنوان إلى " طرق قراءة الملف " لإنه قبل أن يكون موضوع كانت مشكلة :lol:

شكراً لكم

تم تعديل هذه المشاركة بواسطة mr.beshoy في 7 مايو 2010 في 14:26

2
#2

أي خدمه يا عم بيشوي,,

بالنسبة لقراءة ملف, فأنا عندما أقري ملف ما, لا أعتبره ملف نصي, بل هو ملف من ال bytes , فإن شئتُ بعد ذلك, حولت محتوياته ل String, مثال:

package com.forat;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class IO {
	public static void main(String[] args) throws IOException{
		InputStream istream = 
			Thread.currentThread().getContextClassLoader().getResourceAsStream("com/forat/text.dat");
		if (istream == null) 
			throw new RuntimeException("cannot open straem, underlying file not found");

		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		byte[] buff = new byte[1024];
		int len = 0;

		while ( (len=istream.read(buff)) != -1){
		    baos.write(buff, 0, len);
		}
		istream.close();
		baos.close();

		byte[] allFileContentsAsBytes = baos.toByteArray();
		String allFileContentsAsStr = baos.toString();

		System.out.println(allFileContentsAsStr);
		for (int i=0; i <allFileContentsAsBytes.length; i++) {
			System.out.print(allFileContentsAsBytes + " ");
		}
	}
}

تم تعديل هذه المشاركة بواسطة {هويدي} في 7 مايو 2010 في 15:05

1
#3
{هويدي} كتب:

أي خدمه يا عم بيشوي,,

بالنسبة لقراءة ملف, فأنا عندما أقري ملف ما, لا أعتبره ملف نصي, بل هو ملف من ال bytes , فإن شئتُ بعد ذلك, حولت محتوياته ل String, مثال:

package com.forat;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class IO {
	public static void main(String[] args) throws IOException{
		InputStream istream = 
			Thread.currentThread().getContextClassLoader().getResourceAsStream("com/forat/text.dat");
		if (istream == null) 
			throw new RuntimeException("cannot open straem, underlying file not found");

		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		byte[] buff = new byte[1024];
		int len = 0;

		while ( (len=istream.read(buff)) != -1){
		    baos.write(buff, 0, len);
		}
		istream.close();
		baos.close();

		byte[] allFileContentsAsBytes = baos.toByteArray();
		String allFileContentsAsStr = baos.toString();

		System.out.println(allFileContentsAsStr);
		for (int i=0; i <allFileContentsAsBytes.length; i++) {
			System.out.print(allFileContentsAsBytes + " ");
		}
	}
}

طيب ماهو الفرق بين هذه الطرق وماهو الأفضل من ناحية الأداء :)

#4

بيشوي,

ألا توجد طريقة أحسن من هذه لقرائة ال bytes ل String:

StringBuilder stringBuilder = new StringBuilder();
while ((i = bufferedInputStream.read()) != -1) {
	stringBuilder.append((char) i);
}

ToBeOrNotToBe :

بالنسبه للطريقة التي إستخدمها الأخ بيشوي, فهو إستخدم built-in buffers مثل BufferedReader و BufferedInputStream و هي حاجه كويسه.

بينما الطريقة التي إستخدمتها أنا, فأقوم بعمل buffer بنفسي

                byte[] buff = new byte[1024];

أعتقد, لو أنك تريد قراءة ملف نصي, إستخدم طريقة الأخ بيشوي, لو أنك تريد قراءة ملف غير نصي, إستخدم الطريقة التي أنا إستخدمتها..

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