برخی از سناریوها نیاز دارند که یک فایل را در جاوا کپی کنید. ممکن است یک اسکریپت ساده برای خودکارسازی فرآیندها برای یک مدیر فایل ایجاد کنید. شما حتی می توانید یک برنامه کامل بنویسید که با فایل ها کار می کند.
برخی از سناریوها نیاز دارند که یک فایل را در جاوا کپی کنید. ممکن است یک اسکریپت ساده برای خودکارسازی فرآیندها برای یک مدیر فایل ایجاد کنید. شما حتی می توانید یک برنامه کامل بنویسید که با فایل ها کار می کند.
بسته به عملکرد مورد نیاز، سادگی یا حتی نسخه جاوا که استفاده می کنید، راه های زیادی وجود دارد که می توانید یک فایل را کپی کنید.
نحوه کپی کردن فایل ها با استفاده از FileInputStream و FileOutputStream
این روش با خواندن دستی هر بایت داده از فایل و نوشتن آن در یک مقصد جدید کار می کند. برخلاف روش Files.copy زیر، میتوانید از این روش برای همه نسخههای جاوا از جمله جاوا ۶ و نسخههای قبلی استفاده کنید.
از کلاس FileInputStream برای خواندن بایت ها از یک فایل منبع، و FileOutputStream برای نوشتن بایت ها به مقصد استفاده می کند.
- یک فایل در هر نقطه از رایانه خود به نام “SimpleScript.java” ایجاد کنید.
- فایل را در یک ویرایشگر متن یا IDE باز کنید و کد پایه زیر را در application.import java.io.IOException کپی کنید. class SimpleScript { public static void main (String args[]) IOException را پرتاب میکند { // کد شما در اینجا }}
- این کلاسهای جریان ورودی و خروجی اضافی را در بالای فایل وارد کنید، درست بعد از اولین عبارت import.import java.io.File;import java.io.InputStream;import java.io.OutputStream;وارد کردن java.io.FileInputStream ;وارد کردن java.io.FileOutputStream;
- یک فایل جدید به نام “Copy-File-1.txt”، در همان پوشه فایل SimpleScript.java خود ایجاد کنید. هر محتوای نوشته شده را در داخل فایل اضافه کنید.
- در همان پوشه یک دایرکتوری جدید به نام “Destination” نیز ایجاد کنید. هدف این است که فایل “Copy-File-1.txt” را در پوشه جدید کپی کنید.
import java.io.IOException;
class SimpleScript {
public static void main(String args[]) throws IOException {
// Your code here
}
}
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
- در داخل تابع اصلی کلاس، از کلاس File برای ایجاد دو شی فایل جدید استفاده کنید. منبع، که فایلی است که می خواهید کپی کنید، و مقصد، جایی است که می خواهید فایل را در آن کپی کنید. اگر فایل مقصد وجود نداشته باشد، برنامه شما یک فایل. File-1.txt”); مقصد فایل = فایل جدید (“Destination/Copy-File-1.txt”); }}
- پس از آن، یک شی InputStream و OutputStream ایجاد کنید. InputStream input = null; OutputStream output = null;
- از جریان ورودی برای خواندن داده ها در بایت و از جریان خروجی برای نوشتن داده ها در مکان جدید استفاده کنید. سعی کنید { // Create FileInputStream and FileOutputStream objects input = new FileInputStream(source); خروجی = FileOutputStream جدید (مقصد); بایت[] buf = بایت جدید[1024]; int bytesRead; // نوشتن بایت به مقصد در حالی که ((bytesRead = input.read(buf)) > 0) { output.write(buf, 0, bytesRead); }} catch (IOException e) { e.printStackTrace(); System.out.println (“نمی توان فایل را در مقصد کپی کرد: ” + destination.getPath() + “. بررسی کنید که پوشه یا فایل از قبل وجود داشته باشد.”);} در نهایت { // بستن جریان ها if (ورودی ! = null) { input.close(); } if (خروجی != null) { output.close(); }} System.out.println(“فایل کپی شد”);
- برای اجرای اسکریپت، یک خط فرمان باز کنید. با استفاده از دستور cd در Command Prompt ویندوز یا Mac Terminal.cd Desktop به پوشه ای که فایل جاوا خود را در آن ذخیره کرده اید بروید.
- برای کامپایل اسکریپت، فایل جاوا را ذخیره کنید و دستور Javac را در خط فرمان اجرا کنید:javac SimpleScript.java
- برای اجرای اسکریپت از دستور جاوا استفاده کنید:java SimpleScript باید یک خط خروجی بدون خطا ببینید:
- برای مشاهده فایل کپی شده خود به پوشه “Destination” خود بروید.
- برای مشاهده محتوایی که برنامه شما از فایل اصلی کپی کرده است، فایل را باز کنید.
class SimpleScript {
public static void main(String args[]) throws IOException {
// 1st way to copy a file
File source = new File("Copy-File-1.txt");
File destination = new File("Destination/Copy-File-1.txt");
}
}
InputStream input = null;
OutputStream output = null;
try {
// Create FileInputStream and FileOutputStream objects
input = new FileInputStream(source);
output = new FileOutputStream(destination);
byte[] buf = new byte[1024];
int bytesRead;
// Write bytes to the destination
while ((bytesRead = input.read(buf)) > 0) {
output.write(buf, 0, bytesRead);
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("Could not copy the file to the destination: " + destination.getPath() + ". Check if the folder or file already exists.");
} finally {
// Close the streams
if (input != null) {
input.close();
}
if (output != null) {
output.close();
}
}
System.out.println("File copied");
cd Desktop
javac SimpleScript.java
java SimpleScript
نحوه کپی کردن فایل ها با استفاده از Files.copy
اگر از جاوا 7 یا جدیدتر استفاده می کنید، می توانید از روش Files.copy استفاده کنید. این روش به طور کلی پیاده سازی ساده تری است. با توجه به اسناد جاوا، چندین بار اضافه بار برای عملکرد وجود دارد.
برای مثال، روش Files.copy همچنین میتواند از یک جریان ورودی برای کپی فایلها از یک مکان به مکان دیگر استفاده کند، اما از طریق روشی که کد کمتری دارد. همچنین میتوانید از Paths استفاده کنید یا خودتان مشخص کنید که چگونه میخواهید این روش فایل شما را کپی کند.
- یک فایل جدید به نام “Copy-File-2.txt” در همان پوشه ای که فایل SimpleScript.java خود را دارید ایجاد کنید. هر محتوای نوشته شده را در داخل فایل اضافه کنید.
- در بالای فایل، import برای classes “java.nio.file.Paths” و “java.nio.file.Files” اضافه کنید.import java.nio.file.Paths;import java.nio.file.Files;
- دو رشته اضافه کنید که نشان دهنده مسیر فایل نسبی برای فایل مبدا و مقصد است. از روش Files.copy استفاده کنید، که از قبل منطق کپی فایل را در مقصد انجام می دهد. String copySource = “Copy-File-2.txt”;String copyDestination = “Destination/Copy-File-2.txt”; { Files.copy(Paths.get(copySource), Paths.get(copyDestination));} catch (Exception e) { System.out.println(“نمی توان فایل را در مقصد کپی کرد: ” + copyDestination + “. بررسی کنید که آیا پوشه یا فایل از قبل وجود دارد.”);}System.out.println(“2nd File copied”);
- اسکریپت را با استفاده از دستورات جاوا و جاوا اجرا کنید.
- برای مشاهده فایل کپی شده خود به پوشه “Destination” خود بروید.
import java.nio.file.Paths;
import java.nio.file.Files;
String copySource = "Copy-File-2.txt";
String copyDestination = "Destination/Copy-File-2.txt";
try {
Files.copy(Paths.get(copySource), Paths.get(copyDestination));
} catch (Exception e) {
System.out.println("Could not copy the file to the destination: " + copyDestination + ". Check if the folder or file already exists.");
}
System.out.println("2nd File copied");
نحوه کپی کردن فایل ها با استفاده از FileChannel.transferTo()
با توجه به مستندات جاوا، این روش می تواند راه بالقوه سریع تری برای کپی فایل ها باشد. با این حال، این بستگی به نحوه اجرای تابع دارد.
- یک فایل جدید به نام “Copy-File-3.txt” در همان پوشه ای که فایل SimpleScript.java خود را دارید ایجاد کنید. مقداری از محتوای نمونه را به این فایل اضافه کنید.
- در بالای SimpleScript.java، کلاس “java.nio.channels.FileChannel” را در کنار سه کلاس قبلی مرتبط با فایل از io package.import java.io.File;import java.io.FileInputStream;import وارد کنید. java.io.FileOutputStream;وارد کردن java.nio.channels.FileChannel;
- اشیاء فایل را برای مبدا و مقصد ایجاد کنید و از آنها برای ایجاد یک جریان ورودی و یک جریان خروجی استفاده کنید. File-3.txt”);FileInputStream inStream = New FileInputStream(src);FileOutputStream outStream = new FileOutputStream(dst);
- از متد TransferTo از کلاس FileChannel برای کپی کردن فایل در مقصد استفاده کنید. سعی کنید { FileChannel inChannel = inStream.getChannel(); FileChannel outChannel = outStream.getChannel(); inChannel.transferTo(0, inChannel.size(), outChannel);} catch (Exception e) { System.out.println(“نمی توان فایل را در مقصد کپی کرد: ” + dst.getPath() + “. بررسی کنید که آیا پوشه یا فایل از قبل وجود دارد.”);} در نهایت { // Close the streams inStream.close(); outStream.close();}System.out.println(“سومین فایل کپی شد”);
- اسکریپت را با استفاده از دستورات جاوا و جاوا اجرا کنید.
- برای مشاهده فایل کپی شده خود به پوشه “Destination” خود بروید.
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.channels.FileChannel;
File src = new File("Copy-File-3.txt");
File dst = new File("Destination/Copy-File-3.txt");
FileInputStream inStream = new FileInputStream(src);
FileOutputStream outStream = new FileOutputStream(dst);
try {
FileChannel inChannel = inStream.getChannel();
FileChannel outChannel = outStream.getChannel();
inChannel.transferTo(0, inChannel.size(), outChannel);
} catch (Exception e) {
System.out.println("Could not copy the file to the destination: " + dst.getPath() + ". Check if the folder or file already exists.");
} finally {
// Close the streams
inStream.close();
outStream.close();
}
System.out.println("3rd File copied");
کپی کردن فایل ها در جاوا فقط شروع است
راه های زیادی وجود دارد که می توانید یک فایل را در جاوا کپی کنید. سه راه ممکن شامل استفاده از روش جریان سنتی، روش Files.copy یا روش transferTo است.
بسیاری از عملیات مدیریت فایل دیگر وجود دارد که می توانید با استفاده از جاوا انجام دهید. برخی از این موارد عبارتند از انتقال فایل ها، حذف فایل ها یا فشرده سازی فایل ها. در صورت نیاز به خودکارسازی فرآیندهای خاص در مدیر فایل، اینها می توانند برای یادگیری مفید باشند.