بنام خدا : در ادامه مبحث فایل و ورودی و خروجی در جاوا در خدمت دوستان هستم .
خواندن و نوشتن فایل
همچنان که قبلا هم گفتم inputStream برای خواندن از یک سری داده بصورت جریانی از داده ها از منبع ورودی است (فایل , کیبورد ....) و outputStream نوشتن یک جریان داده ای در منبع خروجی . در زیر یک ساختار سلسله مراتبی از کلاسها و اشیایی مورد استفاده در ساخت جریان داده یا DataStream رو میبینید :

FileInputStream :
برای ایجاد یک شی از این کلاس معمولا به دو شیوه عمل میکنیم :
InputStream f = new FileInputStream("C:/java/hello");//تعریف شی و همزمان اختصاص یک مسیر فایل برای ایجاد جریان
File f = new File("C:/java/hello");//تعریف یک آبجکت فایل
InputStream f = new FileInputStream(f);//اختصاص فایل به جریان فایل
حالا که یک شی از نوع جریان فایل ایجاد کردیم میتونیم از متدهاش استفاده کنیم .
متد با توضیحات |
public void close() throws IOException{}
این متد کل جریان رو میبنده و منابع سیستمی اختصاص داده شده به اون رو آزاد میکنه |
protected void finalize() throws IOException {}
برای اطمینان از اینکه هنگام تمام شدن کار با جریان فایل در زمان ازاد شده منابع سیستمی از از این پردازه جریان فایل حتما بسته شده باشه |
public int read(int r) throws IOException{}
برای خواندن یک بایت مشخص از جریان ورودی . در واقع بایت بعدی از داده ها رو برمیگردونه اگه به انتهای جریان داده ها برسه -1 رو برمیگردونه |
public int read(byte[] r) throws IOException{}
این متد به اندازه طول ارایه ای که بصورت پارامتر بهش پاس داده شده از جریان ورودی داده میخونه در پایان داده ها -1 رو برمیگردونه |
public int available() throws IOException{}
تعداد بایتهای موجو در جریان داده رو برمیگردونه |
|
FileOutputStream :
برای ایجاد یک فایل نوشتن توی فایل استفاده میشه مثل آبجکت قبلی معمولا به دو روش میتونیم یک آبجکت از این نوع کلاس تعریف کنیم
OutputStream f = new FileOutputStream("C:/java/hello") ;
//یا به شکل پایین
File f = new File("C:/java/hello");
OutputStream f = new FileOutputStream(f);
متدهای زیر برای استفاده از آبجکت تعریف شده از نوع خروجی فایل هست :
متد با توضیحات |
public void close() throws IOException{}
بستن فایل خروجی و گرفتن تمام منابع اختصاص داده شده به فایل |
protected void finalize()throws IOException {}
اجرای ان متد برای اطمینان از بسته شدن فایل هنگام پایان استفاده از فایل هست |
public void write(int w)throws IOException{}
نوشتن بایت مشخص در داخل فایل خروجی |
public void write(byte[] w)
نوشتن یک ارایه از بایت ها در داخل خروجی بصورت یکجا. |
مثال زیر رو دقت کنید :
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] ); // داخل فایل خانه های آرایه رو مینویسه
}
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");//چاپ خطای ورودی و خروجی در صورت ایجاد
}
}
}
FileReader , FileWriter :
برای خواندن و نوشتن در فایلها در جاوا راههای زیادی پیشبینی شده و استفاده از این دو کلاس رو هم بایک مثال در پایین میبینید
import java.io.*;
public class FileRead{
public static void main(String args[])throws IOException{
File file = new File("Hello1.txt");
// ساخت یک فایل
file.createNewFile();
// ساخت یک آبجکت برای نوشتن در فایل
FileWriter writer = new FileWriter(file);
// نوشتن در فایل
writer.write("This\n is\n an\n example\n");
writer.flush();
writer.close();
//ایجاد یک آبجکت فایل ورودی
FileReader fr = new FileReader(file);
char [] a = new char[50];
fr.read(a); // خواندن محتوی فایل ورودی
for(char c : a)
System.out.print(c); //چاپ کاراکتر ها یک به یک
fr.close();
}
}
خروجی :
This
is
an
example
Directory یا مسیر ها در جاوا :
برای ساخت مسیر ها از کلاس File به همراه دو متد مهم زیر استفاده میکنیم :
mkdir(): برای ساخت یک دایرکتوری استفاده میشه در صورت مفقیت در ساخت true و در غیر اینصورت false رو برمیگردون (اگه مسیر از قبل موجود باشه یا اینکه مسیر رو اشتباه وارد کرده باشید)
mkdirs() : برای ساخت کسیر و مسیر والد مسیر استفاده میشه
مثال زیر قضیه رو روشنتر میکنه :
import java.io.File;
public class CreateDir {
public static void main(String args[]) {
String dirname = "/tmp/user/java/bin";
File d = new File(dirname);
// ایجاد دایرکتوری.بصورت یکجا
d.mkdirs();
}
}
گرفتن لیست دایرکتوری و فایلهای یک مسیر خاص در جاوا :
با استفاده از متد list از کلاس File این کار رو انجام میدیم :
import java.io.File;
public class ReadDir {
public static void main(String[] args) {
File file = null;
String[] paths;
try{
// ساخت آبجکت فایل
file = new File("/tmp");
// ایجاد آرایه ای از لیست دارکتوری و فایلها
paths = file.list();
// برای هر نام در لیست فایلها و مسیر ها
for(String path:paths)
{
// چاپ نام فایلها و مسیرها
System.out.println(path);
}
}catch(Exception e){
//در صورت ایجاد خطا
e.printStackTrace();
}
}
}
خروجی :
test1.txt
test2.txt
ReadDir.java
ReadDir.class
تا جلسه بعد در پناه پروردگار.