View Full Version : سوال: چگونه به انتهای فایل داده های جدید اضافه کنیم؟
java88
پنج شنبه 27 خرداد 1389, 19:41 عصر
با سلام
من یه برنامه ای کتابخانه نوشته ام که در آن نام وشماره و...دانشجو را ذخیره کرده ام با استفاده از کلاس (File به صورت object ) .اکنون اگر دانشجو ی جدیدی عضوشود نمی دانم چگونه او را به انتهای فایل اضافه کنم.
lidaline
شنبه 29 خرداد 1389, 16:19 عصر
با سلام
من یه برنامه ای کتابخانه نوشته ام که در آن نام وشماره و...دانشجو را ذخیره کرده ام با استفاده از کلاس (File به صورت object ) .اکنون اگر دانشجو ی جدیدی عضوشود نمی دانم چگونه او را به انتهای فایل اضافه کنم.
میتونید از stream مخصوص برای اشیا استفاده کنید یعنی کلاس ObjectOutputStream
.دقیق یادم نیست ولی متدی در این کلاس هست که اشیا رو توی فایل مینوسه فکر کنم writeObject باشه .
سوالتون کمی مبهمه چون نگفتید که این شی رو به چه شکلی ذخیره کردید ولی بهترین راه وآسانترین راه اینکه از لیست استفاده کنید.در این روش تعداد افرادی که ثبت نام میشن نا محدود خواهد شد.برعکس استفاده از آرایه.
java88
شنبه 29 خرداد 1389, 18:17 عصر
میتونید از stream مخصوص برای اشیا استفاده کنید یعنی کلاس ObjectOutputStream
.دقیق یادم نیست ولی متدی در این کلاس هست که اشیا رو توی فایل مینوسه فکر کنم writeObject باشه .
سوالتون کمی مبهمه چون نگفتید که این شی رو به چه شکلی ذخیره کردید ولی بهترین راه وآسانترین راه اینکه از لیست استفاده کنید.در این روش تعداد افرادی که ثبت نام میشن نا محدود خواهد شد.برعکس استفاده از آرایه.
با سلام
من با استفاده از objectOutputStream تعدادی دانشجو ذخیره کرده ام (مثلا 100)الان می خواهم 10 نفر دیگر را به این 100 اضافه کنم(عضو شوند) .اکنون من نمی دانم این 10 نفر را چگونه به ا نتهای فایل ضافه کنم
با تشکر
mohsensaghafi
شنبه 29 خرداد 1389, 20:09 عصر
سلام دوست عزیز.
فایل رو بصورت ویرایش باز کن، برو به آخر فایل و اطلاعات جدیدت رو توش بنویس.
همش هم دستور داره واسه خودش. کدمش رو نمی دونی تا واست بنویسیمش؟
java88
شنبه 29 خرداد 1389, 22:31 عصر
سلام دوست عزیز.
فایل رو بصورت ویرایش باز کن، برو به آخر فایل و اطلاعات جدیدت رو توش بنویس.
همش هم دستور داره واسه خودش. کدمش رو نمی دونی تا واست بنویسیمش؟
با سلام
می خواستم بدونم:اولا چطور فایل رو با ویرایش باز می کنن؟(یعنی با استفاده از ObjectInputStream بخونم) دوم اینکه من با استفاده از آرایه اسم ونام خانوادگی...رو ذخیره کرده ام .اگه میشه لطفا همه ی مراحل یا اون متدها رو برام بگید.
با تشکر فراوان
mohsensaghafi
یک شنبه 30 خرداد 1389, 14:29 عصر
سلام دوست عزیز.
با کد زیر فکر کنم بتونی پروژه رو تغییر بدی و جواب بگیری.
RandomAccessFile f = new RandomAccessFile("a.txt","rw");
f.seek(f.length());
Object o=new Object();
f.writeChars(o.toString());
f.close();
یا علی!
java88
دوشنبه 31 خرداد 1389, 12:33 عصر
سلام دوست عزیز.
با کد زیر فکر کنم بتونی پروژه رو تغییر بدی و جواب بگیری.
RandomAccessFile f = new RandomAccessFile("a.txt","rw");
f.seek(f.length());
Object o=new Object();
f.writeChars(o.toString());
f.close();
یا علی!
با تشکر از راهنما یتون اگر میشه به این قسمت باز هم نگاه بکنید که اگر سوالی در این مورد نوشتم جواب بدین
باسپاس فراوان
vbnovin
دوشنبه 31 خرداد 1389, 17:30 عصر
java88 اگر ممکن است کد را برامون بزار ین تا ببینینم و یاد بگیریم ممنونم از این تایپیک مفید ..
اگر ممکن است لطفا توضیح دهید .. ایا این برنامه برای موبایل نوشته شده است javaME می باشد یا نه ؟
java88
دوشنبه 31 خرداد 1389, 18:48 عصر
سلام دوست عزیز.
با کد زیر فکر کنم بتونی پروژه رو تغییر بدی و جواب بگیری.
RandomAccessFile f = new RandomAccessFile("a.txt","rw");
f.seek(f.length());
Object o=new Object();
f.writeChars(o.toString());
f.close();
یا علی!
ببخشند من این طوری اسم ونام خانوادگی وشماره دانشجوی و..... رو ذخیره کرده ام که بصورت Objectاون روشی که شما گفته اید WriteObject نداره اگه میشه لطفا میشه کمکم کنید.
public void WriteFile()throws IOException{
outfile =new File("student.doc");
outstream =new FileOutputStream(outfile);
objectstream =new ObjectOutputStream(outstream) ;
int N =Integer.parseInt(JOptionPane.showInputDialog("How many students are there for remember? "));
student =new Student[N];
objectstream.writeInt(N);
for( i=0 ;i<student.length ;i++){
student [i] =new Student();
student[i].setName(JOptionPane.showInputDialog("please enter firstName: "));
student[i].setFamilyName(JOptionPane.showInputDialog("Please enter lastName :"));
student[i].setNumber(Integer.parseInt(JOptionPane.showInputD ialog("Please enter Number: ")));
student[i].setCheckout(null);
objectstream.writeObject(student[i]);
}
objectstream.close();
}
mohsensaghafi
سه شنبه 01 تیر 1389, 13:58 عصر
سلام دوست عزیز.
کد درون این صفحه رو نگاه کن. این طوری باید تو فایل بنویسی و بخونی. خیلی کمکت خواهد کرد.
http://www.java2s.com/Code/Java/File-Input-Output/UseRandomAccessFiletosaveanobject.htm
java88
سه شنبه 01 تیر 1389, 16:59 عصر
سلام دوست عزیز.
کد درون این صفحه رو نگاه کن. این طوری باید تو فایل بنویسی و بخونی. خیلی کمکت خواهد کرد.
http://www.java2s.com/Code/Java/File-Input-Output/UseRandomAccessFiletosaveanobject.htm
ببخشید این که باز نمی شه!؟
mohsensaghafi
چهارشنبه 02 تیر 1389, 16:50 عصر
import java.io.IOException;
import java.io.RandomAccessFile;
public class CreateEmployeeFile {
public static void main(String[] args) throws Exception {
String[] fnames = { "A", "B", "C" };
String[] lnames = { "a", "b", "c" };
String[] addresses = { "Box 100", "55 Street", "6 Lane" };
byte[] ages = { 46, 59, 32 };
double[] salaries = { 5.0, 6.0, 3.0 };
RandomAccessFile raf = new RandomAccessFile("employee.dat", "rw");
EmployeeRecord er = new EmployeeRecord();
for (int i = 0; i < fnames.length; i++) {
er.setFirstName(fnames[i]);
er.setLastName(lnames[i]);
er.setAddress(addresses[i]);
er.setAge(ages[i]);
er.setSalary(salaries[i]);
er.write(raf);
}
raf = new RandomAccessFile("employee.dat", "rw");
er = new EmployeeRecord();
int numRecords = (int) raf.length() / er.size();
for (int i = 0; i < numRecords; i++) {
er.read(raf);
System.out.print(er.getFirstName() + " ");
System.out.print(er.getLastName() + " ");
System.out.print(er.getAddress() + " ");
System.out.print(er.getAge() + " ");
System.out.println(er.getSalary());
}
raf.seek(0);
for (int i = 0; i < numRecords; i++) {
er.read(raf);
if (er.getAge() >= 55) {
er.setSalary(0.0);
raf.seek(raf.getFilePointer() - er.size());
er.write(raf);
raf.seek(raf.getFilePointer() - er.size());
er.read(raf);
}
System.out.print(er.getFirstName() + " ");
System.out.print(er.getLastName() + " ");
System.out.print(er.getAddress() + " ");
System.out.print(er.getAge() + " ");
System.out.println(er.getSalary());
}
}
}
class EmployeeRecord {
private String lastName;
private String firstName;
private String address;
private byte age;
private double salary;
void read(RandomAccessFile raf) throws IOException {
char[] temp = new char[15];
for (int i = 0; i < temp.length; i++)
temp[i] = raf.readChar();
lastName = new String(temp);
temp = new char[15];
for (int i = 0; i < temp.length; i++)
temp[i] = raf.readChar();
firstName = new String(temp);
temp = new char[30];
for (int i = 0; i < temp.length; i++)
temp[i] = raf.readChar();
address = new String(temp);
age = raf.readByte();
salary = raf.readDouble();
}
void write(RandomAccessFile raf) throws IOException {
StringBuffer sb;
if (lastName != null)
sb = new StringBuffer(lastName);
else
sb = new StringBuffer();
sb.setLength(15);
raf.writeChars(sb.toString());
if (firstName != null)
sb = new StringBuffer(firstName);
else
sb = new StringBuffer();
sb.setLength(15);
raf.writeChars(sb.toString());
if (address != null)
sb = new StringBuffer(address);
else
sb = new StringBuffer();
sb.setLength(30);
raf.writeChars(sb.toString());
raf.writeByte(age);
raf.writeDouble(salary);
}
void setAge(byte age) {
this.age = age;
}
byte getAge() {
return age;
}
void setAddress(String address) {
this.address = address;
}
String getAddress() {
return address;
}
void setFirstName(String firstName) {
this.firstName = firstName;
}
String getFirstName() {
return firstName;
}
void setLastName(String lastName) {
this.lastName = lastName;
}
String getLastName() {
return lastName;
}
void setSalary(double salary) {
this.salary = salary;
}
double getSalary() {
return salary;
}
int size() {
return 2 * (15 + 15 + 30) + 9;
}
}
Reynard69
پنج شنبه 03 تیر 1389, 11:50 صبح
outstream =new FileOutputStream(outfile,true);
اینجوری بنویسی درست می شه
هر وقته دیگم خواستی ادامش بنویسی خودش برات از ادامش می نویسه
java88
شنبه 05 تیر 1389, 22:28 عصر
outstream =new FileOutputStream(outfile,true);
اینجوری بنویسی درست می شه
هر وقته دیگم خواستی ادامش بنویسی خودش برات از ادامش می نویسه
با سپاس فراوان
java88
شنبه 05 تیر 1389, 22:29 عصر
import java.io.IOException;
import java.io.RandomAccessFile;
public class CreateEmployeeFile {
public static void main(String[] args) throws Exception {
String[] fnames = { "A", "B", "C" };
String[] lnames = { "a", "b", "c" };
String[] addresses = { "Box 100", "55 Street", "6 Lane" };
byte[] ages = { 46, 59, 32 };
double[] salaries = { 5.0, 6.0, 3.0 };
RandomAccessFile raf = new RandomAccessFile("employee.dat", "rw");
EmployeeRecord er = new EmployeeRecord();
for (int i = 0; i < fnames.length; i++) {
er.setFirstName(fnames[i]);
er.setLastName(lnames[i]);
er.setAddress(addresses[i]);
er.setAge(ages[i]);
er.setSalary(salaries[i]);
er.write(raf);
}
raf = new RandomAccessFile("employee.dat", "rw");
er = new EmployeeRecord();
int numRecords = (int) raf.length() / er.size();
for (int i = 0; i < numRecords; i++) {
er.read(raf);
System.out.print(er.getFirstName() + " ");
System.out.print(er.getLastName() + " ");
System.out.print(er.getAddress() + " ");
System.out.print(er.getAge() + " ");
System.out.println(er.getSalary());
}
raf.seek(0);
for (int i = 0; i < numRecords; i++) {
er.read(raf);
if (er.getAge() >= 55) {
er.setSalary(0.0);
raf.seek(raf.getFilePointer() - er.size());
er.write(raf);
raf.seek(raf.getFilePointer() - er.size());
er.read(raf);
}
System.out.print(er.getFirstName() + " ");
System.out.print(er.getLastName() + " ");
System.out.print(er.getAddress() + " ");
System.out.print(er.getAge() + " ");
System.out.println(er.getSalary());
}
}
}
class EmployeeRecord {
private String lastName;
private String firstName;
private String address;
private byte age;
private double salary;
void read(RandomAccessFile raf) throws IOException {
char[] temp = new char[15];
for (int i = 0; i < temp.length; i++)
temp[i] = raf.readChar();
lastName = new String(temp);
temp = new char[15];
for (int i = 0; i < temp.length; i++)
temp[i] = raf.readChar();
firstName = new String(temp);
temp = new char[30];
for (int i = 0; i < temp.length; i++)
temp[i] = raf.readChar();
address = new String(temp);
age = raf.readByte();
salary = raf.readDouble();
}
void write(RandomAccessFile raf) throws IOException {
StringBuffer sb;
if (lastName != null)
sb = new StringBuffer(lastName);
else
sb = new StringBuffer();
sb.setLength(15);
raf.writeChars(sb.toString());
if (firstName != null)
sb = new StringBuffer(firstName);
else
sb = new StringBuffer();
sb.setLength(15);
raf.writeChars(sb.toString());
if (address != null)
sb = new StringBuffer(address);
else
sb = new StringBuffer();
sb.setLength(30);
raf.writeChars(sb.toString());
raf.writeByte(age);
raf.writeDouble(salary);
}
void setAge(byte age) {
this.age = age;
}
byte getAge() {
return age;
}
void setAddress(String address) {
this.address = address;
}
String getAddress() {
return address;
}
void setFirstName(String firstName) {
this.firstName = firstName;
}
String getFirstName() {
return firstName;
}
void setLastName(String lastName) {
this.lastName = lastName;
}
String getLastName() {
return lastName;
}
void setSalary(double salary) {
this.salary = salary;
}
double getSalary() {
return salary;
}
int size() {
return 2 * (15 + 15 + 30) + 9;
}
}
با سپاس فراوان
java88
شنبه 05 تیر 1389, 22:30 عصر
import java.io.IOException;
import java.io.RandomAccessFile;
public class CreateEmployeeFile {
public static void main(String[] args) throws Exception {
String[] fnames = { "A", "B", "C" };
String[] lnames = { "a", "b", "c" };
String[] addresses = { "Box 100", "55 Street", "6 Lane" };
byte[] ages = { 46, 59, 32 };
double[] salaries = { 5.0, 6.0, 3.0 };
RandomAccessFile raf = new RandomAccessFile("employee.dat", "rw");
EmployeeRecord er = new EmployeeRecord();
for (int i = 0; i < fnames.length; i++) {
er.setFirstName(fnames[i]);
er.setLastName(lnames[i]);
er.setAddress(addresses[i]);
er.setAge(ages[i]);
er.setSalary(salaries[i]);
er.write(raf);
}
raf = new RandomAccessFile("employee.dat", "rw");
er = new EmployeeRecord();
int numRecords = (int) raf.length() / er.size();
for (int i = 0; i < numRecords; i++) {
er.read(raf);
System.out.print(er.getFirstName() + " ");
System.out.print(er.getLastName() + " ");
System.out.print(er.getAddress() + " ");
System.out.print(er.getAge() + " ");
System.out.println(er.getSalary());
}
raf.seek(0);
for (int i = 0; i < numRecords; i++) {
er.read(raf);
if (er.getAge() >= 55) {
er.setSalary(0.0);
raf.seek(raf.getFilePointer() - er.size());
er.write(raf);
raf.seek(raf.getFilePointer() - er.size());
er.read(raf);
}
System.out.print(er.getFirstName() + " ");
System.out.print(er.getLastName() + " ");
System.out.print(er.getAddress() + " ");
System.out.print(er.getAge() + " ");
System.out.println(er.getSalary());
}
}
}
class EmployeeRecord {
private String lastName;
private String firstName;
private String address;
private byte age;
private double salary;
void read(RandomAccessFile raf) throws IOException {
char[] temp = new char[15];
for (int i = 0; i < temp.length; i++)
temp[i] = raf.readChar();
lastName = new String(temp);
temp = new char[15];
for (int i = 0; i < temp.length; i++)
temp[i] = raf.readChar();
firstName = new String(temp);
temp = new char[30];
for (int i = 0; i < temp.length; i++)
temp[i] = raf.readChar();
address = new String(temp);
age = raf.readByte();
salary = raf.readDouble();
}
void write(RandomAccessFile raf) throws IOException {
StringBuffer sb;
if (lastName != null)
sb = new StringBuffer(lastName);
else
sb = new StringBuffer();
sb.setLength(15);
raf.writeChars(sb.toString());
if (firstName != null)
sb = new StringBuffer(firstName);
else
sb = new StringBuffer();
sb.setLength(15);
raf.writeChars(sb.toString());
if (address != null)
sb = new StringBuffer(address);
else
sb = new StringBuffer();
sb.setLength(30);
raf.writeChars(sb.toString());
raf.writeByte(age);
raf.writeDouble(salary);
}
void setAge(byte age) {
this.age = age;
}
byte getAge() {
return age;
}
void setAddress(String address) {
this.address = address;
}
String getAddress() {
return address;
}
void setFirstName(String firstName) {
this.firstName = firstName;
}
String getFirstName() {
return firstName;
}
void setLastName(String lastName) {
this.lastName = lastName;
}
String getLastName() {
return lastName;
}
void setSalary(double salary) {
this.salary = salary;
}
double getSalary() {
return salary;
}
int size() {
return 2 * (15 + 15 + 30) + 9;
}
}
با تشکر فراوان
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.