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

خطوات لبناء أداه لتحديت ملف الجار

بدأه العيافـي في 16 ديسمبر 2010 · 40 رد · 3,547 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

بحثت كثيرا في الانترنت عن كيفيه تحديث ملف الجار ولكني لم اجد شيء يذكر.

لذلك سنبدا نحن في انشاء اداه لذلك بمشاركتكم .

في البدايه سأقوم بذكر الطريقه في هذا الموضوع ،

ثم اداه بسيطه للتحديث كما اننا سنتفق على ان اسم هذه الاداه هو updateJars.jar ،

1 - طريقة التحديث

امر تحديث ملف الجار هو

jar uf jar-file input-file

jar-file - هو ملف الجار الذي ترغب في تحديثه

input-file - هذه الملفات التي تريد ادراجها في الجار. لاحظ بانك لن تقوم بالتعديل على ملف موجود في الجار لكن ستقوم باستبداله.

لا اعلم ان كان هناك خيارات اضافيه في الامر jar uf jar-file input-file ، اذا كان هناك خيارات ارجوا ان تخبرونا بها .

2 - اداه بسيطه للتحديث

قمت بانشاء اداه

1 - تحدد من خلالها ملف الجار.

2 - تحدد من خلالها ملف txt (يمكك اسبدال اي شي ولكن حاليا نحن في مرحله التطوير ).

3 - تحديد مكان اضافة الملف الجديد.

post-82434-057180600 1292478763_thumb.gi

يوجد في الملف المرفق 3 ملفات ( اثنان منها لتجربه و الاخير هي الاداه )

1- ملف جار باسم testjar.jar اضغط علىه (دبل كليك) يقوم بقرائة ملف داخلي يحتوي على نص مكتوب في ( ملف الجار قبل التحديث ) .

2- ملف txt يحتوي على نص مكتوب فيه (ملف جار محدث )

3 - الاداه باسم updateJars.jar ، شغل الاداه املا الحقول كما في الصوره السابقه . اضغط زر التحديث ثم اعد تشغيل ملف الجار testjar.jar لترى ان الملف تم تغيييره.

اعذروني اذا فيه شي مو واضح فانها لا اجيد الشرح :)

updateJarFiles_v0.1.1.rar

المرفقات
OhomePC_05.gif
2
#2

اذا لم يعمل تأكد من ان

Path C:\Program Files\Java\jdk1.6.0_22\bin

معرف في جهازك

هذا الاصدار لمن يرغب في معرفة الطريقة . الشفره موجوده في ملف الجار

التحسينات المقترحه :

1 - التعديل لاكثر من ملف.

2 - واجهه للاداء swing + حزمة لاستخدامها في برامج مختلفه.

3 - تحديث ملف الجار لنفسه. ( لا اعتقد بان هذا سيكون بطريقة مباشره)

4 - اي اقتراح نراه مفيد لهذه الاداه .

سيكون تواجدي في المنتدى قليل خلال 3 اسابيع القادمة ، لذى ارجوا ان تتحملوني ، وشكرا

تم تعديل هذه المشاركة بواسطة العيافـي في 16 ديسمبر 2010 في 09:33

1
#3

بارك الله فيك أخي..

لكني أعترض على الأداه لأمرين:

1- المبرمج الذي سيضطر للتعديل في ملف JAR من المفترض أنه مبرمج متمرس ... فيجب عليه الإلمام بهذا الأمر قبل أن يفكر في إستخدامه

2- هل هذا الاداه تقوم بتنفيذ أمر ال jar من النظام؟؟ إذن هو أمر ليس بجيد .... إن كنت تريد عمل شئ إحترافي فقم بإستدعاء المكتبات التي تقوم بعمل ذلك

1
#4

هلا اخوي هويدي

بالنسبه لسبب الاول ، حينما افرغ ساقوم بالتعديل على الحزمة بحيت تكون اكثر سهوله في الاستخدام.

اما بالنسبه للاعتراض الثاني ، هذا الكود قمت بصناعته قبل تقريبا 11 شهر واذكر انني في ذلك الوقت حاولت استخدام الحزمة jar ولكني لم اتمكن من التعديل على ملف جار موجود عندي ، حينما افرغ سأقرا عن هذه الحزمة , فاذا كانت تمكنني من التعديل على ملف جاهز فهذا رائع و ستسهل على الكثير وعلى المستخدم الكثير.

#5

لا أعرف عن الحزمة jar الكثير

لكني أعرف عن zip

على كل هذه الشيفرة كتبتها للكتابة على ملفات zip

ربما تفيدكم في شيء

package jar.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

public class JarUtitlity {
	public static void main(String[] args) {
		try {
			File beforeFile =new File("E:\\project\\test2\\src\\jar\\test\\wordsgame.jar");
			File afterFile =new File("E:\\project\\test2\\src\\jar\\test\\wordsgame1.jar");
			ZipInputStream zipInputStream=new ZipInputStream(new FileInputStream(beforeFile));

			ZipOutputStream zipOutputStream=new ZipOutputStream(new FileOutputStream(afterFile));
			ZipEntry nextElement = zipInputStream.getNextEntry();
			while(nextElement!=null){

				System.out.println(nextElement.getName());

				zipOutputStream.putNextEntry(nextElement);
				zipOutputStream.closeEntry();
				nextElement = zipInputStream.getNextEntry();
			}
			zipInputStream.close();
			ZipEntry entry=new ZipEntry("Users\\asalehi\\Desktop\\mpj.txt");//مسار المجلد أو الملف
			zipOutputStream.putNextEntry(entry);
			zipOutputStream.write("alaa".getBytes());//إذا كنا نتكلم عن ملف المعلموات المراد كتابتها في الملف
			zipOutputStream.closeEntry();
			zipOutputStream.close();

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

لا أظن ملفات jar تبعد كثيراً

تحياتي

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

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

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

728x90.png

#6

يعطيكم العافية شباب , بالنسبة لبرنامجك أخي العيافي جربته وللأسف ما ضبط unsure.gif

علاء بالنسبة للكود الذي طرحته وظيفته فقط يضيف ملفات للـZip ولا يقوم بضغطها ومن ثم إضافتها؟


HeartOutputStream myHeart;
OutputStream myHeartOutStream;

myHeartOutStream = MAllaw.getHeart().getOutputStream();
myHeart = new HeartOutputStream(myHeartOutStream);

while(myHeart.isStillBeating())
myHeart.write("I ♥ Java");

#7
علاء الصالحي كتب:

لا أعرف عن الحزمة jar الكثير

لكني أعرف عن zip

على كل هذه الشيفرة كتبتها للكتابة على ملفات zip

ربما تفيدكم في شيء

لا أظن ملفات jar تبعد كثيراً

تحياتي

انا جربت الكود الخاص بك ولكن حصلت لدى مشكله فى

zipOutputStream.putNextEntry(nextElement);

بيقولى فيها الخطأ التالى

run:
META-INF/
META-INF/MANIFEST.MF
systemparamters/
java.util.zip.ZipException: invalid entry size (expected 221 but got 0 bytes)
    	at java.util.zip.ZipOutputStream.closeEntry(ZipOutputStream.java:228)
    	at java.util.zip.ZipOutputStream.putNextEntry(ZipOutputStream.java:144)
    	at Impo.JarUtitlity.main(JarUtitlity.java:37)
BUILD SUCCESSFUL (total time: 0 seconds)

لكن بالنسبه للاضافه هو ضاف الملف اللى انا عاوز اضيفه داخل ملف الجار الجديد

لكن الملفات القديمه لم تتم اضافتها

ممكن توضح لى الخطأ فين

لان انا عاوز استخدم طريقه اضافه الملفات داخل ملف الجار لاستكمال برنامج JKelany Installer API

منتظر ردك:)

Software Developer
Mahmoudkelany.com


 

#8

انا جبت الكود دا من على النت

وهو شغال كويس

وهذا ما اريده فى برنامجى

لكن بيضيف فى الملف الرئيسى للجار

انا عاوز اضيف داخل مجلد معين فى الجار

لكن انا مش اتعاملت قبل كدا مع الـ Zip File

هل مممكن توضحوا كيف يتم ذلك ؟

import java.io.*;
import java.util.zip.*;

public class AddFilesToJarFile {

	public static void main(String[] args) {
    	try {
        	addFilesToExistingZip(new File("d:/Crazy Paint Prush.jar"), new File[]{
                    	new File("d:/2.jpg"), new File("d:/22.jpg"),});
    	} catch (IOException ex) {
        	ex.printStackTrace();
    	}
	}

	public static void addFilesToExistingZip(File zipFile, File[] files) throws IOException {
    	// get a temp file
    	File tempFile = File.createTempFile(zipFile.getName(), null);
    	// delete it, otherwise you cannot rename your existing zip to it.
    	tempFile.delete();
    	boolean renameOk = zipFile.renameTo(tempFile);
    	if (!renameOk) {
        	throw new RuntimeException("could not rename the file " + zipFile.getAbsolutePath() + " to " + tempFile.getAbsolutePath());
    	}
    	byte[] buf = new byte[1024];
    	ZipInputStream zin = new ZipInputStream(new FileInputStream(tempFile));
    	ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFile));
    	ZipEntry entry = zin.getNextEntry();
    	while (entry != null) {
        	String name = entry.getName();
        	System.out.println(name);
        	boolean notInFiles = true;
        	for (File f : files) {
            	if (f.getName().equals(name)) {
                	notInFiles = false;
                	break;
            	}
        	}
        	if (notInFiles) {
            	// Add ZIP entry to output stream.
            	out.putNextEntry(new ZipEntry(name));
            	// Transfer bytes from the ZIP file to the output file
            	int len;
            	while ((len = zin.read(buf)) > 0) {
                	out.write(buf, 0, len);
            	}
        	}
        	entry = zin.getNextEntry();
    	}
    	// Close the streams
    	zin.close();
    	// Compress the files
    	for (int i = 0; i < files.length; i++) {
        	InputStream in = new FileInputStream(files);
        	// Add ZIP entry to output stream.
        	out.putNextEntry(new ZipEntry(files.getName()));
        	// Transfer bytes from the file to the ZIP file
        	int len;
        	while ((len = in.read(buf)) > 0) {
            	out.write(buf, 0, len);
        	}
        	// Complete the entry
        	out.closeEntry();
        	in.close();
    	}
    	// Complete the ZIP file
    	out.close();
    	tempFile.delete();
	}
}

تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 26 ديسمبر 2010 في 17:13

Software Developer
Mahmoudkelany.com


 

#9

محمد علاو

بإمكانك البحث عن الموضوع :)

أعتقد أن هناك setLevel في مكان ما تقوم بهذا الموضوع

هذه الشيفرة مسؤولة عن التأكد من أن ملف .zip لن يفقد محتواه

                        ZipEntry nextElement = zipInputStream.getNextEntry();
                        while(nextElement!=null){

                                System.out.println(nextElement.getName());

                                zipOutputStream.putNextEntry(nextElement);
                                zipOutputStream.closeEntry();
                                nextElement = zipInputStream.getNextEntry();
                        }

بالنسبة لإضافة بيانات جديدة داخل الملف فيتم عن طريق الشيفرة التالية

                        ZipEntry entry=new ZipEntry("Users\\asalehi\\Desktop\\mpj.txt");//مسار المجلد أو الملف
                        zipOutputStream.putNextEntry(entry);
                        zipOutputStream.write("alaa".getBytes());//إذا كنا نتكلم عن ملف المعلموات المراد كتابتها في الملف
                        zipOutputStream.closeEntry();

أول سطر يحدد المسار واسم الملف المراد وضع الملف فيه

السطر الثالث مسؤول عن كتابة البيانات في هذا الملف

بالنسبة للخطأ الحاصل معك لا أعلم ما المشكلة بالضبط

لكن هل جربت الكتابة على ملف مفتوح أو شيء من هذا القبيل؟

تحياتي

تم تعديل هذه المشاركة بواسطة علاء الصالحي في 26 ديسمبر 2010 في 19:53

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

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

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

728x90.png

#10

تمام تم الوصول للهدف

وانا بردوا مش عارف ايه الغلط ف كودك

Software Developer
Mahmoudkelany.com


 

#11

هل جربته على أكثر من ملف؟

تحياتي

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

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

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

728x90.png

#12

اه شغال على اكثر من ملف

وكنت اظن انه لا يدعم نقل ملفات الجار داخل بعضها

وجدته شغال الحمدلله

لكن لدى مشكله فى البرنامج الخاص بى هتجننى

بحاول فيها اهووو :D

Software Developer
Mahmoudkelany.com


 

#13

اخى عثمان

ممكن توضح لى كيفيه الكتابه داخل ملف الجار فى مكان محدد انا عارفه داخل الملف

لانى بصراحه تائه فى شفرتك ولم استطع استخلاص ذلك

Software Developer
Mahmoudkelany.com


 

#14

عفوا عزيزي محمود لم انتبه الى ردك الاخير

عند اضافة ملف داخل ملف الجار يجب ان يكون له نفس الامتداد الموجود داخل ملف الجار. مثل

الملف داخل ملف االجار هو fldr/a.txt

يجب ان يكون هنا ملف له المسار (fldr/a.txt) بجانب ملف الجار المسؤول عن الكتابه.

ارجوا ان تكون الفكره واضحة

#15
العيافـي كتب:

عفوا عزيزي محمود لم انتبه الى ردك الاخير

عند اضافة ملف داخل ملف الجار يجب ان يكون له نفس الامتداد الموجود داخل ملف الجار. مثل

الملف داخل ملف االجار هو fldr/a.txt

يجب ان يكون هنا ملف له المسار (fldr/a.txt) بجانب ملف الجار المسؤول عن الكتابه.

ارجوا ان تكون الفكره واضحة

امممم

طيب لو ملف جديد

لماذا لا يتمكن من قرائته ؟؟؟

مع العلم انه اذا تم وضع هذا الملف باستخدام الـ zip program

وتشغيل البرنامج فانه يقوم بقرائته

انا اتكلم عن برنامج الـ Installer الخاص بى

اذا وضعت الملف المراد تسطيبه داخل الـ installer jar

باستخدام الكود فانه لا يعمل

اما اذا وضعته باستخدام الـ zip program فانه يعمل

استعجب من ذلك wub.gif

Software Developer
Mahmoudkelany.com


 

#16

حتى لو كان الملف جديد

يجب ان يكون امتداد الملف في مساوى للامتداد الذي ترغب في انشائة داخل ملف الجار.

هل حجم الملف بعد اضافتة للجار مساوي لحجمة الحقيقي.

#17

تسلملي يا أخي العیافي

جزاك الله خيرا

#18
العيافـي كتب:

حتى لو كان الملف جديد

يجب ان يكون امتداد الملف في مساوى للامتداد الذي ترغب في انشائة داخل ملف الجار.

هل حجم الملف بعد اضافتة للجار مساوي لحجمة الحقيقي.

لم افهم كلامك

لكن ردا على السوال

فانه لا يساويه

ويختلف الحجم اذا تم وضعه باستخدام الكود

عن حجمه اذا وضع باستخدام برنامج Zip

لكن فى الحاله التانيه يعمل بنجاح

انما باستخدام الكود كانه لم يراه

Software Developer
Mahmoudkelany.com


 

#19

مثال على إضافة ملف برمجيا

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.jar.JarOutputStream;


public class EditJarTest {

	public static void main(String[] args) throws FileNotFoundException, IOException {

		String jarName = "/home/issam/test.jar";
		String jarNameTmp = "/home/issam/test.jar.tmp";

		//Make a temporary copy of the jar file
		BufferedInputStream in = new BufferedInputStream(new FileInputStream(jarName));
		BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(jarNameTmp));
		int b;
		while ((b = in.read()) != -1) {
			out.write(b);
		}
		in.close();
		out.close();

		//The file to add
		String textFile = "/home/issam/test.txt";

		//Read the content of the file to add and put it in a byte array
		FileInputStream textFileIn = new FileInputStream(textFile);
		byte[] data = new byte[textFileIn.available()];
		textFileIn.read(data);
		textFileIn.close();

		JarFile jarFile = new JarFile(jarNameTmp);
		Enumeration<JarEntry> entries = jarFile.entries();

		JarOutputStream jarOut = new JarOutputStream(new FileOutputStream(jarName));

		//Read each entry in the tmp jar and write it in the original jar,
		//because the creation of a new JarOutputStream delete any previous content

		while (entries.hasMoreElements()) {
			JarEntry entry = entries.nextElement();
			if (!entry.isDirectory()) {
				byte[] entryData = new byte[(int)entry.getSize()];
				jarOut.putNextEntry(entry);

				InputStream entryIn = jarFile.getInputStream(entry);
				while (entryIn.read(entryData) != -1) {
					jarOut.write(entryData);
				}
				jarOut.closeEntry();
				entryIn.close();
			}
		}

		//add the new file to the jar
		jarOut.putNextEntry(new JarEntry("test.txt"));
		jarOut.write(data);
		jarOut.closeEntry();

		jarOut.close();
		new File(jarNameTmp).delete();
	}
}

ملاحظة: لم أقرأ الأكواد الموجودة بالأعلى... أجد صعوبة في قراءة شيفرة الآخرين wacko.gif.

تم تعديل هذه المشاركة بواسطة herch في 9 يناير 2011 في 22:54

1
#20
herch كتب:

مثال على إضافة ملف برمجيا

ملاحظة: لم أقرأ الأكواد الموجودة بالأعلى... أجد صعوبة في قراءة شيفرة الآخرين wacko.gif.

اخى عصام

حاولت اضافه ملف jar داخل ملف الـ jar الاصلى

ولكن لم تنجح وحصل لدى خطأ

Exception in thread "main" java.util.zip.ZipException: attempt to write past end of STORED entry

هل هذا الكود يصلح لاضافه ملفات بامتداد jar فى مكان معين داخل ملف الجار الاصلى ؟؟؟

Software Developer
Mahmoudkelany.com


 

#21

جربت إضافة ملف jar وقد تمت إضافته بدون مشاكل. ممكن تضع الكود الذي استعملت؟

#22
herch كتب:

جربت إضافة ملف jar وقد تمت إضافته بدون مشاكل. ممكن تضع الكود الذي استعملت؟

هو كودك :)

طيب ممكن ترفق المشروع اللى استخدمته (مشروع كامل معلش :D )

ولو شويه تعليقات تاعبك معايا انا عارف unsure.gif

لان تقريبا انا مش عارف كدا استخدم الكود بتاعك :D

Software Developer
Mahmoudkelany.com


 

#23

الكود مع بعض التعديلات، لكن نفس المبدأ.

أرفقت الملف فقط، لأني أضفت الملف إلى مشروع موجود وأستعمل فقط Run File

وضعت بعض التعليقات، لكن إذا لم تكن واضحة، حدد الجزء الذي يبدو غير واضحا wink.gif

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.jar.JarOutputStream;


public class EditJarTest {

	static void createTempJar(String originalJar, String copyJar) throws FileNotFoundException, IOException {
		//Make a teporary copy of the jar file
		BufferedInputStream in = new BufferedInputStream(new FileInputStream(originalJar));
		BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(copyJar));
		int b;
		while ((b = in.read()) != -1) {
			out.write(b);
		}
		in.close();
		out.close();
	}

	static byte[] getContentFileToAdd(String filePath) throws FileNotFoundException, IOException {
		//Read the content of the file to add and put it in a byte array
		FileInputStream textFileIn = new FileInputStream(filePath);
		byte[] data = new byte[textFileIn.available()];
		textFileIn.read(data);
		textFileIn.close();
		return data;
	}

	public static void main(String[] args) throws FileNotFoundException, IOException {

		//The path to the original jar
		String jarName = "/home/issam/test.jar";

		//The path to the temporary jar
		String jarNameTmp = "/home/issam/test.jar.tmp";

		createTempJar(jarName, jarNameTmp);

		//The path to the file to add
		String fileToAdd = "/home/issam/tata.jar";

		byte[] data = getContentFileToAdd(fileToAdd);

		//We use the class JarFile to read from the temporary jar file
		JarFile jarFile = new JarFile(jarNameTmp);

		//We retrieve all the entries (files) in the jar file
		Enumeration<JarEntry> entries = jarFile.entries();

		//we will use JarOutputStream to create a new jar file
		JarOutputStream jarOut = new JarOutputStream(new FileOutputStream(jarName));

		//Read each entry in the tmp jar and write it in the original jar,
		//because the creation of a new JarOutputStream delete any previous content

		while (entries.hasMoreElements()) {
			JarEntry entry = entries.nextElement();
			if (!entry.isDirectory()) {
				byte[] entryData = new byte[(int)entry.getSize()];
				jarOut.putNextEntry(entry);

				InputStream entryIn = jarFile.getInputStream(entry);
				while (entryIn.read(entryData) != -1) {
					jarOut.write(entryData);
				}
				jarOut.closeEntry();
				entryIn.close();
			}
		}

		//add the new file to the jar
		jarOut.putNextEntry(new JarEntry(new File(fileToAdd).getName()));
		jarOut.write(data);
		jarOut.closeEntry();

		jarOut.close();
		new File(jarNameTmp).delete();
	}
}

EditJarTest.java

#24

انا استخدمت الكود الجديد

وعدلت عليه

بالطريقه دى

وهى فقط مسارات الملفات

ولكنه ظهر نفس الخطا

Exception in thread "main" java.util.zip.ZipException: attempt to write past end of STORED entry

هل ممكن يكون دا علشان على ويندوز ؟؟؟ ( دا مجرد تصور للمشكله wub.gif )

يقبى انا فالاول كنت بتسخدمه صح وهو نفس اللى عدلته هنا عدلته فالكود القديم ونفس الخطأ

ما العمل اذن ؟؟؟

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.jar.JarOutputStream;

public class EditJarTest {

	static void createTempJar(String originalJar, String copyJar) throws FileNotFoundException, IOException {
    	//Make a teporary copy of the jar file
    	BufferedInputStream in = new BufferedInputStream(new FileInputStream(originalJar));
    	BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(copyJar));
    	int b;
    	while ((b = in.read()) != -1) {
        	out.write(b);
    	}
    	in.close();
    	out.close();
	}

	static byte[] getContentFileToAdd(String filePath) throws FileNotFoundException, IOException {
    	//Read the content of the file to add and put it in a byte array
    	FileInputStream textFileIn = new FileInputStream(filePath);
    	byte[] data = new byte[textFileIn.available()];
    	textFileIn.read(data);
    	textFileIn.close();
    	return data;
	}

	public static void main(String[] args) throws FileNotFoundException, IOException {

    	//The path to the original jar
    	String jarName = "d:/org.jar";

    	//The path to the temporary jar
    	String jarNameTmp = "d:/org.jar.tmp";

    	createTempJar(jarName, jarNameTmp);

    	//The path to the file to add
    	String fileToAdd = "d:/Crazy_Paint_Prush_V1.9.jar";

    	byte[] data = getContentFileToAdd(fileToAdd);

    	//We use the class JarFile to read from the temporary jar file
    	JarFile jarFile = new JarFile(jarNameTmp);

    	//We retrieve all the entries (files) in the jar file
    	Enumeration<JarEntry> entries = jarFile.entries();

    	//we will use JarOutputStream to create a new jar file
    	JarOutputStream jarOut = new JarOutputStream(new FileOutputStream(jarName));

    	//Read each entry in the tmp jar and write it in the original jar,
    	//because the creation of a new JarOutputStream delete any previous content

    	while (entries.hasMoreElements()) {
        	JarEntry entry = entries.nextElement();
        	if (!entry.isDirectory()) {
            	byte[] entryData = new byte[(int) entry.getSize()];
            	jarOut.putNextEntry(entry);

            	InputStream entryIn = jarFile.getInputStream(entry);
            	while (entryIn.read(entryData) != -1) {
                	jarOut.write(entryData);
            	}
            	jarOut.closeEntry();
            	entryIn.close();
        	}
    	}

    	//add the new file to the jar
    	jarOut.putNextEntry(new JarEntry(new File(fileToAdd).getName()));
    	jarOut.write(data);
    	jarOut.closeEntry();

    	jarOut.close();
    	new File(jarNameTmp).delete();
	}
}

Software Developer
Mahmoudkelany.com


 

#25

لا أدري blink.gif

كيف تنشئ الملفات jar التي تستعمل؟ باستعمال الأمر jar أم بشيء آخر

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

هل الخطأ يظهر دائما أم فقط عند إضافة الملفات jar؟

تم تعديل هذه المشاركة بواسطة herch في 11 يناير 2011 في 02:39

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