ورود

View Full Version : سوال در مورد io



hogat_sh
دوشنبه 17 فروردین 1388, 16:30 عصر
سلام من کلا فهم سيستم ورودي خروجي جاوا برام سخته زيادم مطلب خوندم اما هنوز برام جا نيفتاده من البته استفاده کردم مثلا يه برنامه داشتم که کاربر بايد رشته اي رو وارد ميکرد برنامه بعد از تشخيص صحت ورودي روش یه سری کار انجام ميداد تو اون از بافرريدر استفاده کردم يا برا يه برنامه ساده وروديي رو از فايل خوندم
اما هنوز ...
دوم اينکه در مورد جستجو يا مقايسه متن فارسي نکته اي وجود نداره؟ کلا اگه بتونيد اين مثال رو بديد فک کنم به يه جايي برسم يعني من چيزي رو که خودم نوشتم رو ميدم شما تکميلش کنيد تو برنامه ي من کاربر در يوزرنيم و فيلد پسورد مقاديري رو وارد ميکنه اين محتويات با مقادير داخل فايلهاي passText.txt , usrText.txt
مقايسه ميشه اگه درست بود پنجرهاي با عنوان ok وگرنه با عنوان no باز ميشه البته شما فايلها رو در همون شاخه خودتون ايجاد کنيد و در هر کدومش يه کلمه وارد
کنيد.تا اجرای برنامه رو ببینید من چون نميدونستم چطور ميشه کلاس با مثلا دو متغيير استرينگ يا آرايه با دو عضو رو چطور ميشه روي فايل ذخيره کرد و از اون خوند مجبور شدم از دو فايل و اون هم فقط به منظور خوندن استفاده کنم حالا شما همين برنامه رو اگه ميشه تکميل کنيد يه تابع براي ذخيره يوزر و پسورد به صورت اعضاي آرايه يا کلاس روي فايل و ديگر اينکه برنامه آرايه يا کلاس رو فايل را بخواند و با فيلدهايي که کاربر پر ميکند مقايسه و در صورت درست بودن و يا اشتباه پيغام مناسب ارايه بشه دوم نکته اگه بشه اين برنامه طوري باشه که بشه از کلمات فارسي هم براي ذخيره يوزر و پسورد استفاده بشه تقريبا تمام سوالم حل شده در پايان بايد بگم اين برنامه ي فرضی رو فقط براي يادگيري گرافيک و ورودي خروجي در جاوا برا خودم در نظر گرفته بودم و اميدوارم که با تکميلش نمونه اي برا ساير تازه کاران باشه



import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class My2PasswordGUI extends JFrame {
File fp = new File("passText.txt");
FileInputStream fosp = new FileInputStream(fp);
File fu = new File("usrText.txt");
FileInputStream fosu = new FileInputStream(fu);

JLabel l1 = new JLabel("Enter Your Username");
JLabel l2 = new JLabel("Enter Your Password");
JLabel l3 = new JLabel("");

JButton b1 = new JButton(" ok ");
JButton b2 = new JButton(" cancel ");

JTextField t1 = new JTextField("");
JPasswordField t2 = new JPasswordField("");

public static void main(String args[])throws IOException{
new My2PasswordGUI().show();
}

My2PasswordGUI()throws IOException {

setTitle("Password Validation");
Dimension screenSize;
screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setSize(screenSize.width/3,screenSize.height/3);
setBounds((int) (0.5 * (screenSize.width - getWidth())),
(int) (0.5 * (screenSize.height - getHeight())),
getWidth(), getHeight()
);
setResizable(false);
getContentPane().setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();

gbc.gridy=0;
gbc.gridx=0;
gbc.insets = new Insets(10, 10, 10, 10);
getContentPane().add(l1,gbc);

gbc.gridy=0;
gbc.gridx=1;
t1.setColumns(10);
gbc.insets = new Insets(10, 10, 10, 10);
getContentPane().add(t1,gbc);

gbc.gridy=1;
gbc.gridx=0;
gbc.insets = new Insets(10, 10, 10, 10);
getContentPane().add(l2,gbc);

gbc.gridy=1;
gbc.gridx=1;
t2.setColumns(10);
gbc.insets = new Insets(10, 10, 10, 10);
getContentPane().add(t2,gbc);

gbc.gridy=2;
gbc.gridx=0;
gbc.insets = new Insets(10, 10, 10, 10);
getContentPane().add(l3,gbc);

gbc.gridy=3;
gbc.gridx=0;
gbc.insets = new Insets(10, 10, 10, 10);
getContentPane().add(b1,gbc);
b1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
{okButtonEvent(e);}

}
}
);

gbc.gridy=3;
gbc.gridx=1;
gbc.insets = new Insets(10, 10, 10, 10);
getContentPane().add(b2,gbc);
b2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
cancelButtonEvent(e);
}
}
);

pack();
}

public void okButtonEvent(ActionEvent e) {
String su,sp;
char c,d;
char[] a = new char[3];
int l,b,i=0,j=0;
boolean bu=false,bp=false;
su = t1.getText();
l = su.length();
//-----------------------------------------------
for(b=0;b<l;b++){
try {
c = (char) fosu.read();
if(su.charAt(b) == c){
a[b]=c;
i++;
if(i==2){
bu=true;
}
}
else{
break ;
}
}
catch(IOException z){
}
}
//---------------------------------
sp = t2.getText();
l = sp.length();
for(b=0;b<l;b++){
try {
c = (char) fosp.read();
if(sp.charAt(b) == c){
a[b]=c;
j++;
if(j==2){
bp=true;
}
}
else{
break ;
}
}
catch(IOException z){
}
}
//-----------------------------------------------
if(bp&&bu){
JFrame jf = new JFrame("ok");
this.setVisible(false);
jf.setSize(400,400);
jf.show();
}
else{
JFrame jf = new JFrame("error");
this.setVisible(false);
jf.setSize(400,400);
jf.show();
}
}

public void cancelButtonEvent(ActionEvent e){
System.exit(0);
}

}
ممنون

hogat_sh
سه شنبه 18 فروردین 1388, 09:31 صبح
سلام اگه تکمیل مثال براتون سخته توضیح هم بدبد کافیه منتظرم
ممنون

amirfarshad
سه شنبه 18 فروردین 1388, 11:20 صبح
درست متوجه نشدم که سوالت چیه، اما چیزهایی که فهمیدم:

چطور ميشه کلاس با مثلا دو متغيير استرينگ يا آرايه با دو عضو رو چطور ميشه روي فايل ذخيره کرد

اگر میخواهی مقدار چند متغییر رو روی یک فایل ذخیره کنی ساده ترین روش اینه که اونها رو بهم بچسبونی و یک جداکننده (Delimiter) بین اونها بگذاری. مثلا این دو متغیر رو داری:


String a = "ali";
String b = "amir";
حالا اینجا با یک کاراکتر جداکننده مثل # من اونها رو میچسبونم به هم:
String c = a+"#"+b;
که نتیجه مقدار میشه این: ali#amir
و در آخر میری این مقدار رو توی فایل مینویسی.
حالا برای جداکردن ، میایی این مقدار میخونی و بعد با استفاده از مثلا StringTokenizer اونها رو از هم جدا میکنی. در مورد StringTokenizer هم مثال باید توی سایت باشه، گوگل هم کنی زیاد مثال پیدا میکنی.

البته برای کاراکتر جدا کننده میشه از کاراکترهای دیگه هم استفاده کرد، من همینجوری # رو مثال زدم، معمولا با ویرگول اینکار رو انجام میدن

ُ

اين برنامه طوري باشه که بشه از کلمات فارسي هم براي ذخيره يوزر و پسورد استفاده بشه
اگر میخواهی توی فایل فارسی بنویسی و بخونی، چیزی که من میدونستم اینه که برای نوشتن توی فایل از writeUTF که در DataOutputStream وجود داره استفاده کنی و برای خوندن هم از readUTF که در DataInputStream وجود داره.

hogat_sh
سه شنبه 18 فروردین 1388, 19:21 عصر
سلام
راهت خوب بود با خودم گفتم چرا به فکر خودم نرسیده بود
اما کلا این جواب من نیست من میخوام بدونم مثلا یه آرایه صد عضوی
یا یک آبجکت رو چطور میشه تو فایل ذخیره و اونا رو بازیابی کرد تو
سی این کار به راحتی ممکنه که استراکت یا آرایه رو رو فایل ذخیره کرد و خوند
یعنی وقت ذخیره کردن یه آرایه از یه نوع رو ذخیره میکنید در فایل و وقت خوندن هم یه آرایه
با همون نوع رو میخونید از فایل اما در جاوا نمیدونم چطوریه اگه بتونید مثال بزنید خوبه و کلا سیستم ورودی خروجی جاوا برام هنوز جا نیفتاده اگه میشه یه بار دیگه سوال رو بخون
اصلا کلا دسترسی تصادفی و ترتیبی به فایل در جاوا چطوریه
در مورد utf از اونا استفاده کردم اما بحث اینه که وقتی فایل رو باز میکنید در یک ویراشگر
با قابلیت یونیکد متن نا مفهوم و به اشکال عجیب غریبه
ببخشید و ممنون

amirfarshad
چهارشنبه 19 فروردین 1388, 00:53 صبح
خوب من فکر میکنم که یه مرور کلی روی IO در جاوا باید داشته باشید، کلی کلاس وجود داره که عملیات خوندن و نوشتن رو انجام میدن، هر کدوم به یک روشی. بهترین جا هم اگر منابع انگلیسی میخواهید، سایت سان هست.
اما برای نوشتن آبجکت در فایل من این رو پیدا کردم:ObjectOutputStream
که یک مثال کامل هم اینجا بود براش:

http://www.javadb.com/writing-objects-to-file-with-objectoutputstreamبرای دسترسی تصادفی هم از RandomAccessFile استفاده میشه.

hogat_sh
پنج شنبه 20 فروردین 1388, 23:50 عصر
ممنون انگار باید یه کتاب تهیه کنم و زحمت رنج خود را خورد
آقا amirfarshad دوست من واقعا زحمت کشیدی جواب دادید
و امید موفقیت براتون دارم
ممنون
حجت.