بعد العمل، استخدمت التكنولوجيا تغييرات مع تغييرات المشروع، وأحيانًا C#، وأحيانًا Java، وبالطبع بعض التقنيات المجزأة الأخرى. بشكل عام، تستغرق لغة C# وقتًا أطول، تليها Java. ليس لدي أي تفضيل للغات، فاللغة التي يمكنها القيام بالعمل هي لغة جيدة. ومن منظور كائني التوجه، أعتقد أنه لا يوجد فرق بين C# وJava بالنسبة لي.
تستعرض هذه المقالة بشكل أساسي المحتوى المتعلق بعمليات الإدخال/الإخراج في Java. يعد الإدخال/الإخراج أيضًا ميزة أساسية في لغات البرمجة. وينقسم الإدخال/الإخراج في Java إلى نوعين، أحدهما قراءة متسلسلة والآخر عشوائي.
لنلقِ نظرة على القراءة المتسلسلة أولاً. هناك طريقتان لإجراء القراءة المتسلسلة: إحداهما هي InputStream/OutputStream، وهو عبارة عن دفق إدخال وإخراج يعمل على وحدات البايت؛ والأخرى هي Reader/Writer، والتي تعمل على الأحرف تيارات العملية.
أدناه نرسم هيكل InputStream
FileInputStream: يشغل الملفات التي غالبًا ما تستخدم مع BufferedInputStream
PipedInputStream: يمكن استخدامه للاتصال بين الخيوط
ObjectInputStream: يمكن استخدامه لتسلسل الكائنات
ByteArrayInputStream: يُستخدم لمعالجة إدخال صفائف البايت
LineNumberInputStream: يمكنه إخراج رقم السطر الحالي ويمكن تعديله في البرنامج
فيما يلي هيكل OutputStream
PrintStream: يوفر واجهات مشابهة للطباعة وprintln لإخراج البيانات
دعونا نلقي نظرة على كيفية استخدام Stream لتشغيل الإدخال والإخراج.
قراءة الملفات باستخدام InputStream
انسخ رمز الكود كما يلي:
استخدم FileInputStream لقراءة معلومات الملف
البايت الثابت العام [] readFileByFileInputStream (ملف ملف) يلقي IOException
{
ByteArrayOutputStreamput = new ByteArrayOutputStream();
FileInputStream fis = null;
يحاول
{
fis = new FileInputStream(file);
بايت[] المخزن المؤقت = بايت جديد[1024];
int بايت القراءة = 0;
while((bytesRead = fis.read(buffer, 0, buffer.length)) != -1)
{
Output.write(buffer, 0, bytesRead);
}
}
قبض (استثناء على سبيل المثال)
{
System.out.println("حدث خطأ أثناء القراءة" + file.getAbsoluteFile());
}
أخيراً
{
if (fis !=null) fis. Close();
إذا (الإخراج!=فارغ)output.Close();
}
إرجاع الإخراج.toByteArray();
}
قراءة الملفات باستخدام BufferedInputStream
انسخ رمز الكود كما يلي:
البايت الثابت العام [] readFileByBufferedInputStream (ملف ملف) يطرح استثناء
{
FileInputStream fis = null;
BufferedInputStream bis = null;
ByteArrayOutputStreamput = new ByteArrayOutputStream();
يحاول
{
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
بايت[] المخزن المؤقت = بايت جديد[1024];
int بايت القراءة = 0;
while (((bytesRead = bis.read(buffer, 0, buffer.length)) != -1)
{
Output.write(buffer, 0, bytesRead);
}
}
قبض (استثناء على سبيل المثال)
{
System.out.println("حدث خطأ أثناء القراءة" + file.getAbsoluteFile());
}
أخيراً
{
if (fis != null) fis. Close();
if (bis != null) bis. Close();
إذا (الإخراج! = فارغ) الإخراج.إغلاق()؛
}
إرجاع الإخراج.toByteArray();
}
انسخ الملفات باستخدام OutputStream
انسخ رمز الكود كما يلي:
انسخ الملفات باستخدام FileOutputStream
CopyFileByFileOutputStream (ملف الملف) العام الفارغ الثابت يلقي IOException
{
FileInputStream fis = null;
FileOutputStream fos = null;
يحاول
{
fis = new FileInputStream(file);
fos = new FileOutputStream(file.getName() + ".bak");
بايت[] المخزن المؤقت = بايت جديد[1024];
int بايت القراءة = 0؛
while((bytesRead = fis.read(buffer,0,buffer.length)) != -1)
{
fos.write(buffer, 0, bytesRead);
}
fos.flush();
}
قبض (استثناء على سبيل المثال)
{
System.out.println("حدث خطأ أثناء النسخ" + file.getAbsoluteFile());
}
أخيراً
{
if (fis != null) fis. Close();
if (fos != null) fos. Close();
}
}
انسخ رمز الكود كما يلي:
انسخ الملفات باستخدام BufferedOutputStream
نسخة فارغة ثابتة عامة FilebyBufferedOutputStream (ملف ملف) تطرح IOException
{
FileInputStream fis = null;
BufferedInputStream bis = null;
FileOutputStream fos = null;
BufferedOutputStream bos = null;
يحاول
{
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
fos = new FileOutputStream(file.getName() + ".bak");
bos = new BufferedOutputStream(fos);
بايت[] المخزن المؤقت = بايت جديد[1024];
int بايت القراءة = 0؛
while (((bytesRead = bis.read(buffer, 0, buffer.length)) != -1)
{
bos.write(buffer, 0, bytesRead);
}
bos.flush();
}
قبض (استثناء على سبيل المثال)
{
System.out.println("حدث خطأ أثناء النسخ" + file.getAbsoluteFile());
}
أخيراً
{
if (fis != null) fis. Close();
if (bis != null) bis. Close();
if (fos != null) fos. Close();
if (bos != null) bos. Close();
}
}
يتعامل الكود هنا مع الاستثناءات بشكل غير كامل، وسنقدم كودًا كاملاً وصارمًا لاحقًا.
دعونا نلقي نظرة على هيكل القارئ
يتوافق القارئ هنا بشكل أساسي مع InputStream.
هيكل الكاتب على النحو التالي
دعونا نلقي نظرة على بعض الأمثلة على استخدام القارئ أو الكاتب
استخدم Reader لقراءة محتويات الملف
انسخ رمز الكود كما يلي:
استخدم BufferedReader لقراءة محتويات الملف
سلسلة readFile العامة الثابتة (ملف سلسلة) تطرح IOException
{
BufferedReader br = null;
StringBuffer sb = new StringBuffer();
يحاول
{
br = new BufferedReader(new FileReader(file));
خط السلسلة = فارغ؛
بينما ((السطر = br.readLine()) != فارغ)
{
sb.append(line);
}
}
قبض (استثناء على سبيل المثال)
{
System.out.println("حدث خطأ أثناء القراءة" + file);
}
أخيراً
{
if (br != null) br. Close();
}
إرجاع sb.toString();
}
نسخ الملفات باستخدام الكاتب
انسخ رمز الكود كما يلي:
انسخ الملفات باستخدام BufferedWriter
ملف نسخ الفراغ الثابت العام (ملف سلسلة) يلقي IOException
{
BufferedReader br = null;
BufferedWriter bw = null;
يحاول
{
br = new BufferedReader(new FileReader(file));
bw = new BufferedWriter(new FileWriter(file + ".bak"));
خط السلسلة = فارغ؛
بينما ((السطر = br.readLine())!= فارغ)
{
bw.write(line);
}
}
قبض (استثناء على سبيل المثال)
{
System.out.println("حدث خطأ أثناء النسخ" + file);
}
أخيراً
{
if (br != null) br. Close();
if (bw != null) bw. Close();
}
}
دعونا نلقي نظرة على كيفية إجراء الوصول العشوائي إلى الملفات. يتم استخدام RandomAccessFile بشكل أساسي في Java لإجراء عمليات عشوائية على الملفات.
إنشاء ملف بحجم ثابت
انسخ رمز الكود كما يلي:
إنشاء ملفات ذات حجم ثابت
createFile الفراغي العام الثابت (ملف سلسلة، حجم int) يلقي IOException
{
درجة حرارة الملف = ملف جديد (ملف)؛
RandomAccessFile raf = new RandomAccessFile(temp, "rw");
raf.setLength(size);
raf. Close();
}
كتابة بيانات عشوائية إلى ملف
انسخ رمز الكود كما يلي:
أدخل بيانات عشوائية في ملف
ملف الكتابة الفراغي الثابت العام (ملف السلسلة، محتوى البايت []، int startPos، int contentLength) يلقي IOException
{
RandomAccessFile raf = new RandomAccessFile(new File(file), "rw");
raf.seek(startPos);
raf.write(content, 0, contentLength);
raf. Close();
}
بعد ذلك، دعونا نلقي نظرة على بعض العمليات الشائعة الأخرى
نقل الملفات
انسخ رمز الكود كما يلي:
نقل الملفات
ملف نقل منطقي عام ثابت (String sourceFile، String destFile)
{
مصدر الملف = ملف جديد (sourceFile)؛
إذا قام (!source.exists()) بطرح RuntimeException جديد("الملف المصدر غير موجود.");
File dest = new File(destFile);
if (!(new File(dest.getPath()).exists())) new File(dest.getParent()).mkdirs();
إرجاع المصدر.renameTo(dest);
}
نسخ الملفات
انسخ رمز الكود كما يلي:
نسخ الملفات
ملف نسخ ثابت عام (String sourceFile، String destFile) يلقي IOException
{
مصدر الملف = ملف جديد (sourceFile)؛
إذا (!source.exists()) طرح RuntimeException جديد ("الملف غير موجود.");
إذا قام (!source.isFile()) بطرح RuntimeException جديد ("إنه ليس ملفًا.");
if (!source.canRead()) throw new RuntimeException("لا يمكن قراءة الملف.");
File dest = new File(destFile);
إذا (dest.exists())
{
إذا (dest.isDirectory()) طرح RuntimeException الجديد ("الوجهة مجلد.")؛
آخر
{
dest.delete();
}
}
آخر
{
FileparentFolder = new File(dest.getParent());
إذا (!parentFolder.exists())parentFolder.mkdirs();
if (!parentFolder.canWrite()) throw new RuntimeException("لا يمكن كتابة الوجهة.");
}
FileInputStream fis = null;
FileOutputStream fos = null;
يحاول
{
fis = new FileInputStream(source);
fos = new FileOutputStream(dest);
بايت[] المخزن المؤقت = بايت جديد[1024];
int بايت القراءة = 0؛
while((bytesRead = fis.read(buffer, 0, buffer.length)) != -1)
{
fos.write(buffer, 0, bytesRead);
}
fos.flush();
}
قبض على (IOException على سبيل المثال)
{
System.out.println("حدث خطأ أثناء النسخ" + sourceFile);
}
أخيراً
{
if (fis != null) fis. Close();
if (fos != null) fos. Close();
}
}
نسخ المجلد
انسخ رمز الكود كما يلي:
نسخ المجلد
نسخ الفراغ الثابت العام (String sourceDir، String destDir) يلقي IOException
{
مصدر الملف = ملف جديد (sourceDir)؛
if (!source.exists()) throw new RuntimeException("المصدر غير موجود.");
إذا قام (!source.canRead()) بطرح RuntimeException الجديد("تعذرت قراءة المصدر.");
File dest = new File(destDir);
إذا (!dest.exists()) dest.mkdirs();
File[] arrFiles = source.listFiles();
for(int i = 0; i < arrFiles.length; i++)
{
إذا (arrFiles[i].isFile())
{
BufferedReader Reader = new BufferedReader(new FileReader(arrFiles[i]));
BufferedWriterwriter = new BufferedWriter(new FileWriter(destDir + "/" + arrFiles[i].getName()));
خط السلسلة = فارغ؛
while((line = Reader.readLine()) != null)writer.write(line);
الكاتب. فلوش ()؛
Reader.Close();
الكاتب. قريب ()؛
}
آخر
{
CopyDir(sourceDir + "/" + arrFiles[i].getName(), destDir + "/" + arrFiles[i].getName());
}
}
}
حذف المجلد
انسخ رمز الكود كما يلي:
حذف المجلد
ديل الفراغ الثابت العام (سلسلة ملف المسار)
{
ملف الملف = ملف جديد(filePath);
if (file == null || !file.exists()) return;
إذا (file.isFile())
{
file.delete();
}
آخر
{
File[] arrFiles = file.listFiles();
إذا (arrFiles.length > 0)
{
for(int i = 0; i < arrFiles.length; i++)
{
del(arrFiles[i].getAbsolutePath());
}
}
file.delete();
}
}
الحصول على حجم المجلد
انسخ رمز الكود كما يلي:
الحصول على حجم المجلد
getFolderSize طويل ثابت عام (سلسلة دير)
{
حجم طويل = 0؛
ملف الملف = ملف جديد (دير)؛
إذا (! file.exists()) طرح RuntimeException جديد ("dir غير موجود.");
إذا كان (file.isFile()) يُرجع file. length();
آخر
{
String[] arrFileName = file.list();
لـ (int i = 0; i < arrFileName.length; i++)
{
size += getFolderSize(dir + "/" + arrFileName[i]);
}
}
حجم الإرجاع؛
}
تقسيم الملفات الكبيرة إلى ملفات صغيرة متعددة
انسخ رمز الكود كما يلي:
تقسيم الملفات الكبيرة إلى عدة ملفات أصغر
ملف تقسيم الفراغ الثابت العام (مسار ملف السلسلة، الوحدة الطويلة) يطرح IOException
{
ملف الملف = ملف جديد(filePath);
إذا (! file.exists()) طرح RuntimeException جديد ("الملف غير موجود.");
حجم طويل = file. length();
إذا (الوحدة > = الحجم) العودة؛
عدد صحيح = الحجم٪ وحدة == 0 (int)(الحجم/الوحدة) : (int)(الحجم/الوحدة) + 1;
String newFile = null;
FileOutputStream fos = null;
FileInputStream fis =null;
بايت[] المخزن المؤقت = بايت جديد[(int)وحدة];
fis = new FileInputStream(file);
بداية طويلة = 0؛
String countFile = filePath + "_Count";
PrintWriterwriter = new PrintWriter(new FileWriter( new File(countFile)));
Writer.println(filePath + "/t" + size);
لـ (int i = 1; i <= count; i++)
{
newFile = filePath + "_" + i;
startPos = (i - 1) * الوحدة؛
System.out.println("إنشاء" + ملف جديد);
fos = new FileOutputStream(new File(newFile));
int bytesRead = fis.read(buffer, 0, buffer.length);
إذا (بايت قراءة ! = -1)
{
fos.write(buffer, 0, bytesRead);
Writer.println(newFile + "/t" + startPos + "/t" + bytesRead);
}
fos.flush();
fos. Close();
System.out.println("StartPos:" + i*unit + "; EndPos:" + (i*unit + bytesRead));
}
الكاتب. فلوش ()؛
الكاتب. قريب ()؛
fis. Close();
}
دمج عدة ملفات صغيرة في ملف واحد كبير
انسخ رمز الكود كما يلي:
دمج عدة ملفات صغيرة في ملف واحد كبير
ملفات الارتباط الثابتة العامة (String countFile) تطرح IOException
{
ملف الملف = ملف جديد (countFile)؛
إذا قام (!file.exists()) بطرح RuntimeException جديد("ملف العد غير موجود.");
BufferedReader Reader = new BufferedReader(new FileReader(file));
خط السلسلة = Reader.readLine();
String newFile = line.split("/t")[0];
long size = Long.parseLong(line.split("/t")[1]);
RandomAccessFile raf = new RandomAccessFile(newFile, "rw");
raf.setLength(size);
FileInputStream fis = null;
بايت[] المخزن المؤقت = فارغ؛
while((line = Reader.readLine()) != null)
{
String[] arrInfo = line.split("/t");
fis = new FileInputStream(new File(arrInfo[0]));
buffer = new byte[Integer.parseInt(arrInfo[2])];
long startPos = Long.parseLong(arrInfo[1]);
fis.read(buffer, 0, Integer.parseInt(arrInfo[2]));
raf.seek(startPos);
raf.write(buffer, 0, Integer.parseInt(arrInfo[2]));
fis. Close();
}
raf. Close();
}
تنفيذ الأمر الخارجي
انسخ رمز الكود كما يلي:
تنفيذ الأمر الخارجي
execExternalCommand (أمر سلسلة، وسيطة سلسلة) باطلة عامة ثابتة
{
عملية العملية = فارغة؛
يحاول
{
عملية = Runtime.getRuntime().exec(command + " " + الوسيطة);
InputStream هو =process.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
خط السلسلة = فارغ؛
بينما ((السطر = br.readLine()) != فارغ)
{
System.out.println(line);
}
}
قبض (استثناء على سبيل المثال)
{
System.err.println(ex.getMessage());
}
أخيراً
{
إذا (عملية!= فارغة)process.destroy();
}
}