بسیاری از برنامهها باید با فایلها کار کنند، خواه در حال نوشتن، انتقال یا حذف آنها باشند. یاد بگیرید که چگونه همه اینها و موارد دیگر را با استفاده از جاوا انجام دهید.
کارهای تکراری زیادی وجود دارد که ممکن است لازم باشد هر از گاهی انجام دهید. یک مثال این است که اگر باید به طور مرتب فایلهای موجود در رایانه محلی خود را تغییر دهید. این اقدامات می تواند شامل کپی، انتقال، حذف یا بایگانی فایل ها باشد.
به جای اینکه این کارهای تکراری را به صورت دستی انجام دهید، می توانید با استفاده از یک برنامه آنها را خودکار کنید. شما می توانید این کار را با یک فایل اسکریپت، با استفاده از یکی از زبان های برنامه نویسی متعدد موجود، مانند جاوا، انجام دهید.
نحوه راه اندازی برنامه جاوا
ابتدا مطمئن شوید که کیت توسعه Java SE Oracle را نصب کرده اید. سپس یک برنامه کنسول جاوا ساده ایجاد کنید:
- یک فایل در هر نقطه از رایانه خود به نام SimpleScript.java ایجاد کنید.
- فایل را در یک ویرایشگر متن یا IDE باز کنید.
- در بالای فایل، کلاس IOException را وارد کنید. این به شما این امکان را می دهد که در هنگام تلاش برای انجام برخی عملکردها، مانند کپی کردن یک file.import java.io.IOException، استثناهای مربوط به فایل یا IO را مدیریت کنید.
- در زیر کلاس اصلی جاوا و متد اصلی را اضافه کنید. وقتی برنامه را راه اندازی می کنید، روش اصلی اجرا می شود. در حال حاضر، فقط یک پیام چاپ کنید تا مطمئن شوید که برنامه به درستی اجرا می شود. پس از این، میتوانید محتویات تابع اصلی را با هر یک از مثالهای زیر جایگزین کنید تا آنها را آزمایش کنید. class SimpleScript { public static void main (String args[]) IOException { System.out.println (“Simple Console App”) ; } }
- برای اجرای اسکریپت، با استفاده از یک خط فرمان شروع کنید تا به محل فایل جاوا خود بروید. به عنوان مثال، اگر فایل خود را در دسکتاپ ذخیره کرده باشید، دستور این خواهد بود:cd Desktop
- فایل را ذخیره کنید و از دستور javac برای کامپایل آن استفاده کنید. هر بار که تغییری در فایل ایجاد میکنید، باید آن را دوباره با javac.javac SimpleScript.java کامپایل کنید.
- برنامه:java SimpleScript را اجرا کنید
import java.io.IOException;
class SimpleScript {
public static void main(String args[]) throws IOException {
System.out.println("Simple Console App");
}
}
cd Desktop
javac SimpleScript.java
java SimpleScript
نحوه دسترسی به فایل های محلی در رایانه
میتوانید از کلاس File برای دسترسی برنامهنویسی به فایلهای یک فهرست استفاده کنید.
- یک پوشه جدید به نام NewDirectory در همان دایرکتوری فایل جاوا ایجاد کنید. چند فایل داخل آن ایجاد کنید—اگر بخواهید میتوانند فایلهای متنی خالی باشند.
- در بالای برنامه جاوا، کلاس File را وارد کنید. این به شما امکان می دهد تا به روش ها و سایر عملکردهای مربوط به فایل های سیستم عامل و Directories دسترسی داشته باشید.import java.io.File.
- یک شی File جدید با استفاده از مسیر نسبی پوشه جدید خود ایجاد کنید. پوشه فایل = new File(“NewDirectory”);
- از تابع listFiles() برای دسترسی به لیستی از تمام فایل های داخل آن دایرکتوری استفاده کنید.File[] listOfFiles = directory.listFiles(); برای (فایل فایل : listOfFiles) { System.out.println(file); }
- با استفاده از دستورات javac و java برنامه را دوباره کامپایل و اجرا کنید.
import java.io.File;
File directory = new File("NewDirectory");
File[] listOfFiles = directory.listFiles();
for (File file : listOfFiles) {
System.out.println(file);
}
نحوه کپی کردن فایل ها در مکان دیگری
راه های مختلفی برای کپی کردن فایل ها وجود دارد. یک راه رایج برای کپی کردن فایل ها (به خصوص قبل از جاوا 7 و بسته java.nio.file)، استفاده از کلاس های FileInputStream یا FileOutputStream است.
- کلاس FileInputStream به شما امکان می دهد یک جریان ورودی را برای خواندن بایت های یک فایل باز کنید.
- کلاس FileOutputStream به شما امکان می دهد یک جریان خروجی را برای نوشتن بایت در یک فایل باز کنید.
هنگام کپی کردن فایل ها، ایده این است که یک جریان ورودی و خروجی را باز کنید. با استفاده از آن جریان ها، بایت های فایل را در محل منبع می خوانید و سپس آن بایت ها را در مکان جدید می نویسید.
این مثال با استفاده از تابع copy() از کلاس Files بسته java.nio.file از پیاده سازی جدیدتری برای کپی فایل ها استفاده می کند. برای استفاده از بسته java.nio.file باید جاوا 7 یا بالاتر را نصب کرده باشید.
- در بالای فایل، کلاس های File و Path را از java.nio.file package.import java.nio.file.Files;import java.nio.file.Paths;
- یک فایل جدید به نام FileToCopy.txt در همان دایرکتوری فایل جاوا خود اضافه کنید. در تابع main() مسیر نسبی آن فایل را اعلام کنید.String copySource = “FileToCopy.txt”;
- یک پوشه جدید به نام NewFolder ایجاد کنید تا فایل را در آن کپی کنید. در تابع main() مسیر نسبی را به مقصد اضافه کنید. String copyDestination = “NewFolder/FileToCopy.txt”;
- از روش copy() برای کپی کردن فایل از مبدا به مقصد استفاده کنید. سعی کنید { Files.copy(Paths.get(copySource), Paths.get(copyDestination));} catch(Exception e) { System.out.println (“نمی توان فایل مشخصات را در: ” + copyDestination + ” کپی کرد. بررسی کنید که آیا پوشه یا فایل از قبل وجود دارد یا خیر.”)
- با استفاده از دستورات javac و java برنامه را دوباره کامپایل و اجرا کنید.
- برای تأیید اینکه برنامه فایل شما را کپی کرده است، پوشه جدید را باز کنید.
import java.nio.file.Files;
import java.nio.file.Paths;
String copySource = "FileToCopy.txt";
String copyDestination = "NewFolder/FileToCopy.txt";
try {
Files.copy(Paths.get(copySource), Paths.get(copyDestination));
} catch(Exception e) {
System.out.println("Could not copy the specs file in: " + copyDestination
+ " . Check if the folder or file already exists.");
}
نحوه انتقال فایل ها یا پوشه ها
میتوانید فایلها یا پوشهها را با استفاده از تابع move() در کلاس Files که بخشی از بسته java.nio.file است، جابهجا کنید.
- یک پوشه جدید به نام DirectoryToMove در همان پوشه فایل جاوا ایجاد کنید.
- یک پوشه دوم به نام NewDirectory در همان پوشه ایجاد کنید. این جایی است که برنامه پوشه اصلی را به آن منتقل می کند.
- اشیاء فایل را برای دایرکتوری که می خواهید منتقل کنید و مکانی که می خواهید به آن منتقل کنید ایجاد کنید: File moveSource = new File(“DirectoryToMove”);File moveDestination = new File(“NewDirectory/DirectoryToMove”);
- از روش Files.move() برای انتقال فایل از مبدا به مقصد استفاده کنید: سعی کنید { Files.move(moveSource.toPath(), moveDestination.toPath()); System.out.println (“دایرکتوری با موفقیت منتقل شد.”);} catch (IOException ex) { ex.printStackTrace();}
- با استفاده از دستورات javac و java برنامه را دوباره کامپایل و اجرا کنید.
- پوشه NewDirectory را باز کنید تا ببینید که پوشه “DirectoryToMove” اکنون داخل است.
File moveSource = new File("DirectoryToMove");
File moveDestination = new File("NewDirectory/DirectoryToMove");
try {
Files.move(moveSource.toPath(), moveDestination.toPath());
System.out.println("Directory moved successfully.");
} catch (IOException ex) {
ex.printStackTrace();
}
چگونه یک فایل را حذف کنیم
می توانید از متد delete() از کلاس File برای حذف یک فایل خاص استفاده کنید.
- یک فایل به نام FileToDelete.txt ایجاد کنید. فایل را در همان پوشه برنامه جاوا خود ذخیره کنید.
- یک شی File جدید برای فایلی که می خواهید حذف کنید ایجاد کنید. سپس از متد ()delete آن برای حذف فایل استفاده کنید. متد حذف یک مقدار درست یا نادرست را برمیگرداند، بسته به اینکه آیا حذف با موفقیت انجام شده است. File fileToDelete = new File(“FileToDelete.txt”); if (fileToDelete.delete()) { System.out.println (“فایل با موفقیت حذف شد.”);} else { System.out.println (“فایل را نمی توان حذف کرد.”);}
File fileToDelete = new File("FileToDelete.txt");
if (fileToDelete.delete()) {
System.out.println("File succesfully deleted.");
} else {
System.out.println("Unable to delete the file.");
}
نحوه زیپ کردن فایل ها
راه های زیادی وجود دارد که می توانید یک آرشیو فشرده حاوی چندین فایل فشرده ایجاد کنید. این مثال از کلاس های ZipOutputStream و ZipEntry استفاده می کند.
- وارد کردن کلاس های ZipOutputStream، ZipEntry و FileOutputStream لازم در بالای file.import java.util.zip.ZipOutputStream;import java.util.zip.ZipEntry;import java.io.FileOutputStream;
- فایل فشرده و فهرستی از اشیاء zipEntry که نشان دهنده فایل های متنی مورد نظر برای فشرده سازی هستند ایجاد کنید. این مثال فایلهای متنی جدیدی تولید میکند، اما میتوانید بعداً اسکریپت را تغییر دهید تا فایلهای متنی را که از قبل وجود دارند، شامل شود. File zipFile = فایل جدید (“ZippedFile.zip”); zipFile1.txt”)، ZipEntry جدید (“zipFile2.txt”)، ZipEntry جدید (“zipFile3.txt”)}؛
- جریان خروجی فشرده را برای نوشتن داده ها در فایل فشرده ایجاد کنید.ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFile));
- هر فایل را به پوشه zip اضافه کنید و stream.for را ببندید (ZipEntry zipEntry : zipEntries) { out.putNextEntry(zipEntry); StringBuilder sb = new StringBuilder(); sb.append(“محتوای داخل فایل متنی”); byte[] data = sb.toString().getBytes(); out.write(data, 0, data.length); out.closeEntry();} out.close();
- با استفاده از دستورات javac و java برنامه را دوباره کامپایل و اجرا کنید. خواهید دید که پوشه zip جدید در فهرست فایل شما ظاهر می شود.
import java.util.zip.ZipOutputStream;
import java.util.zip.ZipEntry;
import java.io.FileOutputStream;
File zipFile = new File("ZippedFile.zip");
ZipEntry[] zipEntries = new ZipEntry[] {new ZipEntry("zipFile1.txt"),
new ZipEntry("zipFile2.txt"), new ZipEntry("zipFile3.txt")};
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFile));
for (ZipEntry zipEntry : zipEntries) {
out.putNextEntry(zipEntry);
StringBuilder sb = new StringBuilder();
sb.append("Content Inside Text File");
byte[] data = sb.toString().getBytes();
out.write(data, 0, data.length);
out.closeEntry();
}
out.close();
خودکارسازی وظایف ساده با جاوا
می توانید از یک اسکریپت برای تکمیل وظایف تکراری فایل منیجر به صورت برنامه ای استفاده کنید. این وظایف شامل دسترسی، کپی، جابجایی، حذف و فشرده سازی فایل ها می باشد.
روش دیگری که می توانید کارهای تکراری را خودکار کنید، استفاده از دستورات سیستم در یک فایل اسکریپت است. در لینوکس و macOS، چنین فایل هایی به عنوان اسکریپت پوسته شناخته می شوند، در حالی که ویندوز به آنها به عنوان اسکریپت دسته ای اشاره می کند.