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

نسخ محتويات ملف (صورة) الى ملف اخر (استفسار + مشكلة)

بدأه sameh mahmoud في 27 أبريل 2009 · 8 رد · 668 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

حاولت عمل نسخة من صورة بأمتداد jpg بستخدام الكود التالي

import java.io.*;


public class sameh
{
   public static void main(String args[]) throws IOException
		  {
					 String file1 = "c:/sameh.jpg";
					 BufferedReader bf1 = new BufferedReader(new FileReader(file1));
					 String file2 = "c:/sameh2.jpg";
					 PrintWriter pw1 = new PrintWriter(new BufferedWriter(new FileWriter(file2)));

					 String line1 = "";

					 while(line1 != null)
						 {
							 line1 =  bf1.readLine();
							 pw1.println(line1);
							 if(line1 == null)
								 break;	 
						 }
				pw1.close();
		  }
}

تتم ترجمة الكود بشكل سليم و تشغيل البرنامج ايضا و تكون مساحة الصورة (او الملف الجديد) نفس مساحة الملف الاصلى و لكن الصورة فارغة

post-158349-1240863590_thumb.jpg

تم تعديل هذه المشاركة بواسطة sameh mahmoud في 27 أبريل 2009 في 23:25

سبـــــحــــان الله و بحمده سبحان الله العظيم

403100468.gif

#3

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

أخي لو نظرت إلى توثيق الكلاسات التي استعملت لوجدت التالي

اقتباس
public class FileReaderextends InputStreamReader Convenience class for reading character files.....

public class BufferedReaderextends Reader Reads text from a character-input stream

public class PrintWriterextends Writer Prints formatted representations of objects to a text-output stream

الكود المعدل



public class sameh
{
public static void main(String args[]) throws IOException
{
String file1 = "img.jpg";
BufferedInputStream in = new BufferedInputStream(new FileInputStream(file1));
String file2 = "img2.jpg";
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file2));
int x;
while((x = in.read()) != -1)
{
out.write(x);
}
out.close();
in.close();
}
}
import java.io.*;

#4

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

شكرا استاذ علاء و استاذ herch

بالنسبة للكود المعدل

انا كل ما اعرفه عن مكونات الملفات انها تتكون من مجموعة من البايت Bytes , اذا كانت هذه المعلومة صحية فكيف تعيد ال method read التى هى من الكلاس BufferedInputStream قيمة من نوع

int و كيف تستخدم الطريقة write التى هى من الكلاس BufferedOutputStream معامل من نوع int للكتابة ؟؟ !!! هل تقوم هاتان الكلاسان بالتحويل من Byte الى int ؟؟؟ ام ماذا ؟

وشكرا لك استاذى على الرد

سبـــــحــــان الله و بحمده سبحان الله العظيم

403100468.gif

#5

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

تعريف الميثود read

اقتباس

throws IOException

Reads the next byte of data from the input stream. The value byte is returned as an int in the range 0 to 255. If no byte is available because the end of the stream has been reached, the value -1 is returned. This method blocks until input data is available, the end of the stream is detected, or an exception is thrown.

public abstract int read()

عندك حق، الملفات تتكون من تتكون من مجموعة من البايت Bytes، ولكن الجافا تستعمل signed numbers، فهذا يعني أن واحد بايت يمتد من -128 إلى 127 فقط، لذلك يتم استعمال int حتى يتسنى لنا استعمال القيم من 0 إلى 255

read تقوم بقراءة بايت واحد، ولكن ناتجها يكون int

أعلم أن طريقة شرحي كارثية :P وهذا يدل على شيء واحد =======> أنا لست أستاذا

تم تعديل هذه المشاركة بواسطة herch في 1 مايو 2009 في 00:29

#6

أخ herch

أهلاً بك في نادي الكارثيين

أنا واحد منهم :lol:

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#7

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

لا مجال للمقارنة. لقد قرأت بعض مقالاتك، وهي مكتوبة ومشروحة بشكل جيد.

أما أنا فلا أستطيع كتابة جملتين مفيدتين لشرح شيء ما :P

إلى اللقاء في كارثة جافاوية جديدة :wink:

#8

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

الف شكرا جدا لك اخى

انا كمان عندى حاجة كارثية (فهمى)

انا عارف انى تعبتك معايا بالاسألة اللى عمال اسألهالك انا اسف

اسمحلى اسألك سؤال كمان و هو ساذج و هيخليك تضحك

لقد قمت بطباعة قيم المتغير x اثناء الحلقة التكرارية ثم اخذتها copy و paste فى ملف NotePade ثم SAVE AS بأمتداد JPG

وللاسف صورة فارغة ! -_-

فما هو قولك فى هذا

و شكرا لك

سبـــــحــــان الله و بحمده سبحان الله العظيم

403100468.gif

#9

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

هذا الملف هو text file وليس binary file

رغم أنك أعطيته امتداد jpg، فهو يبقى ملف نصي

هذا يعني أنك عندما تكتب في هذا الملف 2، فإنك حقيقة تكتب الكود ascii المقابل ل2، وهو 50

لكن حينما تقوم ب

out.write(x);

وx=2، فإنك تكتب فعلا 2

واستعمال BufferedOutputStream يخلق binary file

لكن PrintWriter فللملفات النصية

أخ sameh مثل هذه الأسئلة يجب أن تطرحها على أستاذك لأنه مؤهل أكثر مني للإجابة

على كل حال أرجو أن تكون فهمت ما قلته، وأرجو أن أكون صائبا

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…