با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن. و کاربرانی که دوره کامل آموزش برنامه نویسی جاوا را دنبال می کنند. جاوا به عنوان یک زبان کامل و محبوب در دنیا و مانند سایر زبان های برنامه نویسی قابلیت پشتیبانی از ایجاد و مدیریت فایل ها را برخوردار است. بسته java.io شامل تقریبا هر کلاسی است که شما برای انجام ورودی و خروجی (I / O) و کار با فایل ها به آن در جاوا نیاز داشته باشید. همه ی این stream (جریان ها) یک منبع ورودی و یک مقصد خروجی هستند. stream در بسته java.io بسیاری از داده ها مانند اولیه، شی، شخصیت های محلی و غیره را پشتیبانی می کند. برای آشنایی با چگونگی کار با فایل ها در جاوا و خواندن و نوشتن فایل ها در ادامه ی مباحث فوق با ما همراه باشید.
در ادامه ی آموزش کار با فایل ها در جاوا ابتدا شما را با مفاهیم اصلی کار با فایل ها در جاوا آشنا می کنیم، سپس به بررسی جزئیات بیشتر می پردازیم.
stream می تواند به عنوان یک توالی از داده ها تعریف شود. دو نوع stream وجود دارد:
جاوا پشتیبانی قوی و قابل انعطاف برای I / O مربوط به فایل ها و شبکه ها را ارائه می دهد.
در ادامه ی مباحث کار با فایل ها در جاوا جزئیات بیشتری در مورد I / O در اختیار شما قرار می دهیم.
byte stream در جاوا برای انجام ورودی و خروجی از بایت های ۸ بیتی استفاده می کند.
اگر چه کلاسهای زیادی در ارتباط با جریانهای بایت وجود دارد اما کلاسهای اغلب استفاده شده FileInputStream و FileOutputStream هستند.
در زیر یک نمونه است که از این دو کلاس استفاده شده تا یک فایل ورودی را به یک فایل خروجی کپی کند:
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | import java.io.*; public class CopyFile { public static void main(String args[]) throws IOException { FileInputStream in = null; FileOutputStream out = null; try { in = new FileInputStream("input.txt"); out = new FileOutputStream("output.txt"); int c; while ((c = in.read()) != -1) { out.write(c); } }finally { if (in != null) { in.close(); } if (out != null) { out.close(); } } } } |
سپس فایل input.txt را در سیستم خود ایجاد می کنیم که دارای محتوای زیر است:
1 | This is test for copy file. |
به عنوان یک گام بعدی، برنامه فوق را کامپایل و آن را اجرا می کنیم.
در نتیجه فایل output.txt با محتوای مشابه در input.txt ایجاد می شود.
بنابراین، کد بالا را در فایل CopyFile.java قرار داده و موارد زیر را انجام دهید:
1 2 | $javac CopyFile.java $java CopyFile |
Byte stream برای انجام ورودی و خروجی از بایت های ۸ بیتی استفاده می کند. در حالی که Character streams برای انجام ورودی و خروجی برای یونیکد ۱۶ بیتی مورد استفاده قرار می گیرند.
اگر چه کلاسهای زیادی برای جریانهای شخصیت وجود دارد اما کلاسهای اغلب استفاده شده FileReader و FileWriter هستند.
داخل FileReader از FileInputStream استفاده می کند و FileWriter نیز از FileOutputStream استفاده می کند.
تفاوت در این است که FileReader دو بایت را در یک زمان می خواند و FileWriter دو بایت را در یک زمان می نویسد.
مثال – برای نمونه ایجاد فایل های input.txt و output.txt را با استفاده از FileReader و FileWriter به شما نشان می دهیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | import java.io.*; public class CopyFile { public static void main(String args[]) throws IOException { FileReader in = null; FileWriter out = null; try { in = new FileReader("input.txt"); out = new FileWriter("output.txt"); int c; while ((c = in.read()) != -1) { out.write(c); } }finally { if (in != null) { in.close(); } if (out != null) { out.close(); } } } } |
سپس فایل input.txt را با محتوای زیر ایجاد می کنیم:
1 | This is test for copy file. |
به عنوان یک گام بعدی، برنامه فوق را کامپایل و آن را اجرا می کنیم.
در نتیجه فایل output.txt با محتوای مشابه در input.txt ایجاد می شود.
بنابراین، کد بالا را در فایل CopyFile.java قرار داده و موارد زیر را انجام دهید:
1 2 | $javac CopyFile.java $java CopyFile |
تمام زبان های برنامه نویسی پشتیبانی از استاندارد I / O را ارائه می دهند که کاربر می تواند از صفحه کلید ورودی بدهد و سپس یک خروجی روی صفحه کامپیوتر ایجاد کند.
اگر شما از زبان برنامه نویسی C یا C ++ آگاه هستید، باید از سه استاندارد STDIN، STDOUT و STDERR را بدانید.
و به طور مشابه در جاوا نیز سه جریان استاندارد زیر فراهم شده است:
مثال – کد زیر یک برنامه ی ساده است که InputStreamReader را برای خواندن ورودی تا زمانیکه کاربر حرف “q” را نزده ایجاد می کند:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import java.io.*; public class ReadConsole { public static void main(String args[]) throws IOException { InputStreamReader cin = null; try { cin = new InputStreamReader(System.in); System.out.println("Enter characters, 'q' to quit."); char c; do { c = (char) cin.read(); System.out.print(c); } while(c != 'q'); }finally { if (cin != null) { cin.close(); } } } } |
سپس کد بالا را در فایل ReadConsole.java نگه داریم و سعی کنید آن را کامپایل و اجرا کنید.
سپس مشاهده می کنید که برنامه ی فوق تا زمانیکه حرف ‘q’ را وارد نکرده اید به خواندن ورودی ادامه می دهد:
1 2 3 4 5 6 7 8 9 | $javac ReadConsole.java $java ReadConsole Enter characters, 'q' to quit. 1 1 e e q q |
همانطور که قبلا توضیح داده شد، یک stream می تواند به عنوان دنباله ای از داده ها تعریف شود.
InputStream برای خواندن داده ها از یک منبع استفاده می شود و OutputStream برای نوشتن داده ها به مقصد استفاده می شود.
در اینجا یک سلسله مراتب از کلاسها برای InputStream و OutputStream است:
در ادامه ی مباحث کار با فایل ها در جاوا دو مبحث FileInputStream و FileOutputStream را مورد بررسی قرار می دهیم:
این stream برای خواندن داده ها از فایل ها استفاده می شود.
در این نوع اشیاء را می توان با استفاده از کلمه کلیدی new ایجاد کرد و چندین نوع ساختار نیز وجود دارد.
سپس ساختار یک نام پرونده را به عنوان یک رشته می گیرد تا یک شیء ورودی را برای خواندن فایل ایجاد کند:
1 | InputStream f = new FileInputStream("C:/java/hello"); |
ابتدا یک شیء فایل با استفاده از متد ()File به صورت زیر ایجاد می کنیم:
1 2 | File f = new File("C:/java/hello"); InputStream f = new FileInputStream(f); |
هنگامی که شیء InputStream را در دست دارید، به لیستی از متدهای کمکی دسترسی دارید.
از این متدهای می توانید برای خواندن و انجام عملیات دیگر در فایل ها استفاده کنید:
ردیف | متد و توضیحات مربوطه |
---|---|
۱ | public void close() throws IOException{} این متد stream خروجی فایل را بسته است. هر گونه منابع سیستم مربوط به فایل را منتشر می کند. IOException را پر می کند. |
۲ | protected void finalize()throws IOException {} این متد اتصال به فایل را پاک می کند. اطمینان حاصل می کند که متد نزدیک این جریان خروجی فایل نامیده می شود. |
۳ | public int read(int r)throws IOException{} این متد بایت مشخص شده داده از InputStream را می خواند. و یک int را باز می گرداند. |
۴ | public int read(byte[] r) throws IOException{} این متد، r.length bytes را از جریان ورودی به آرایه را می خواند. اگر پایان فایل باشد، -۱ بازگشت داده خواهد شد. |
۵ | public int available() throws IOException{} تعداد بایت هایی را می توان از input stream فایل خواند.که یک int را باز می گرداند. |
FileOutputStream برای ایجاد یک فایل و نوشتن اطلاعات در آن استفاده می شود.
در این روش اگر فایلی از قبل وجود نداشته باشد آن را ایجاد می کند.
در اینجا دو ساختار هستند که می توانند برای ایجاد یک شی FileOutputStream استفاده شوند.
سپس ساختار یک نام فایل را به عنوان یک رشته می گیرد تا یک شیء ورودی را برای نوشتن فایل ایجاد کند:
1 | OutputStream f = new FileOutputStream("C:/java/hello") |
برای نمونه ابتدا یک شیء فایل با استفاده از متد () File به صورت زیر ایجاد می کنیم:
1 2 | File f = new File("C:/java/hello"); OutputStream f = new FileOutputStream(f); |
هنگامی که به شیء OutputStream دسترسی دارید ، لیستی از متدهای کمکی نیز برای نوشتن داده ها در Stream یا عملیات دیگر ارائه می شود:
ردیف | متد و توضیحات مربوطه |
---|---|
۱ | public void close() throws IOException{} این متد output stream را می بندد و منابع مربوط به فایل را نیز منتشر می کند. |
۲ | protected void finalize()throws IOException {} این متد اتصال فایل را پاک می کند و اطمینان حاصل می کند که متد بسته شده ی فایل نامگذاری شده است. |
۳ | public void write(int w)throws IOException{} این متد بایت مشخص شده را به output stream می نویسد. |
۴ | public void write(byte[] w) نوشته های w.length bytes را از آرایه بایت ذکر شده به OutputStream منتقل می کند. |
مثال – در زیر نمونه ای برای نشان دادن InputStream و OutputStream ارائه شده است:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | import java.io.*; public class fileStreamTest { public static void main(String args[]) { try { byte bWrite [] = {11,21,3,40,5}; OutputStream os = new FileOutputStream("test.txt"); for(int x = 0; x < bWrite.length ; x++) { os.write( bWrite[x] ); // writes the bytes } os.close(); InputStream is = new FileInputStream("test.txt"); int size = is.available(); for(int i = 0; i < size; i++) { System.out.print((char)is.read() + " "); } is.close(); } catch (IOException e) { System.out.print("Exception"); } } } |
کد بالا فایل test.txt را ایجاد کرده و اعداد داده شده را در قالب باینری می نویسد.
دایرکتوری یک فایل است که خود می تواند یک لیست از فایل ها و دایرکتوری های دیگر باشد.
شما از شی File استفاده می کنید تا دایرکتوری ها را ایجاد کنید و فایل های موجود در دایرکتوری را لیست کنید.
دو متد File وجود دارد که می توان از آن ها برای ایجاد دایرکتوری ها استفاده کرد.
مثال – به عنوان نمونه دایرکتوری “/tmp/user/java/bin” را ایجاد می کنیم:
1 2 3 4 5 6 7 8 9 10 11 | import java.io.File; public class CreateDir { public static void main(String args[]) { String dirname = "/tmp/user/java/bin"; File d = new File(dirname); // Create directory now. d.mkdirs(); } } |
کد فوق را اجرا و کامپایل کنید تا دایرکتوری “/tmp/user/java/bin” ایجاد شود.
نکته : اگر از جاوا در ویندوز استفاده می کنید برای مشخص کردن مسیر از اسلش (/) استفاده کنید.گ
شما می توانید از متد ( )list که توسط شیء File ارائه شده برای لیست کردن تمام فایل ها و دایرکتوری های موجود در یک دایرکتوری استفاده کنید.
مثال :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | import java.io.File; public class ReadDir { public static void main(String[] args) { File file = null; String[] paths; try { // create new file object file = new File("/tmp"); // array of files and directory paths = file.list(); // for each name in the path array for(String path:paths) { // prints filename and directory name System.out.println(path); } } catch (Exception e) { // if any error occurs e.printStackTrace(); } } } |
در نتیجه دایرکتوری ها و فایل های موجود در / tmp شما تولید می شود.
خروجی :
1 2 3 4 | test1.txt test2.txt ReadDir.java ReadDir.class |
قابلیت کار با فایل ها در اغلب زبان های برنامه نویسی جامع و محبوب در دنیا ارائه شده است. جاوا نیز به عنوان محبوب ترین زبان برنامه نویسی در دنیا این قابلیت پرکاربرد را برای برنامه نویسان فراهم کرده است. از این رو برای آشنایی شما با چگونگی کار با فایل ها در جاوا مباحث زیر را ارائه دادیم.
Aimi
عرضم به حضورتان اینه که(من مثلا ۱۰ فیلم توی مسیر زیر
/storage/emulated/film/
دارم حالا از این ۱۰ فیلم ۵ تاش خراب و ۵ تاش سالم
هست
من میام این مسیر رو وارد لیست استرینگ میکنم و میخوام برنامه تشخيص بده که کدوم فیلم ها خرابه و کدوم سالم، و بعد تشخیص این فیلم های خراب از لیست استرینگ حذف کنه
همین اگر میشه کامل بهم توضیح بدید
یه کدی باشه که حالا با مقدار true یا false مشخص کنه
منم خودم یکاری میکنم اندازه تعداد فایل این کد اجرا بشه و تک تک این فیلن هارو بررسی کنه
من خودم به چندتا کد جاوا در سایت های معروف خارجی دست یافتم ولی کار باهاشو بلد نبودم
(برای جاوا و محيط اندروید استودیو)
صادق
به جای string بهتره یه لیست از نوع File ایجاد کنید و همه فایل ها رو توی اون لیست بریزید و بعد همه فایل ها رو بررسی کنید. لینک کد ها رو بفرستید تا ببینم چطور کار می کنن