PDA

View Full Version : استفاده از فایل به عنوان دیتابیس در جاوا



mehran34
چهارشنبه 14 مهر 1395, 21:17 عصر
سلام من میخواستم یک برنامه جاوا بنویسم و از فایل واسه ذخیره اطلاعات دانشجو ها استفاده کنم :لبخند: شماره دانشجویی رشته و... و بشه اطلاعات دانشجو ها رو هم اضاف کرد و هم پاک کرد :لبخند::لبخند:
و مشخصات یک دانشجو رو دریافت کرد همش با فایل تکست لطفا کمک کنید با تشکر فراوان

vahid-p
پنج شنبه 15 مهر 1395, 00:05 صبح
شدن که میشه فقط شاید خیلی کارایی خوبی نداشته باشه.
ساده ترین راه:
برای درج که مشکلی نخواهی داشت و به انتهای فایل اضافه می کنی. برای حذف و ویرایش همشو بخون، تغییرات رو اعمال کن و دوباره داخل فایل بنویس.

mehran34
پنج شنبه 15 مهر 1395, 14:01 عصر
شدن که میشه فقط شاید خیلی کارایی خوبی نداشته باشه.
ساده ترین راه:
برای درج که مشکلی نخواهی داشت و به انتهای فایل اضافه می کنی. برای حذف و ویرایش همشو بخون، تغییرات رو اعمال کن و دوباره داخل فایل بنویس.

سلام میشه لطفا بیشتر کمک کنی؟

vahid-p
پنج شنبه 15 مهر 1395, 16:01 عصر
هر چند فکر کنم تو اینترنت سرچ بزنید (به زبان انگلیسی) حتما نمونه کدهای خوبی وجود داره.

اما این یک مثال هست که البته اشکالات زیادی داره و برای اینکه سریع بتونم بنویسم خیلی شاخ و برگ بهش ندادم.
مثلا یک سری اشکالاتی که میدونم وجود داره و شما باید کد رو خودتون تکمیل و تصحیح یا از اول بنویسید. هدفم بیشتر این بود نکاتی که لازمه رو از روی کد بگیرید و حتی ممکنه کدش به دردتون نخوره.
ساختار فایلی که من مد نظرم داشتم به این صورت:
شماره دانشجو (از نوع int) شماره رشته (از نوع int) نام (از نوع String) نام خانوادگی (از نوع String)

اما چیزهایی که باید در نظر گرفت:
1- هر خط مربوط به یک دانشجو هست
2- بین پارامترهای بالا یک Space وجود داره، در نتیجه شما نمی تونید از نام یا نام خانوادگی که دو قسمتی باشه استفاده کنید (بینشون فاصله نباید باشه). این رو خودتون باید تغییر بدید مثلا بینشون اگر علامت % باشه یا هر قراردادی که خودتون می خواید.
3- ترتیبی وجود نداره
4- سرچ تماما بر اساس شماره دانشجو هست
5- ویرایش پیاده سازی نشده و تفاوت زیادی با حذف ندارد
و...

به هر حال یک کلاس به اسم Student تعریف کردم:
public class Student { private int studentID;
private int fieldID;
private String firstName;
private String lastName;


public int getStudentID() {
return studentID;
}


public void setStudentID(int studentID) {
this.studentID = studentID;
}


public int getFieldID() {
return fieldID;
}


public void setFieldID(int fieldID) {
this.fieldID = fieldID;
}


public String getFirstName() {
return firstName;
}


public void setFirstName(String firstName) {
this.firstName = firstName;
}


public String getLastName() {
return lastName;
}


public void setLastName(String lastName) {
this.lastName = lastName;
}
}

کلاس Main :
import java.io.File;import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Scanner;


public class Main {


private static File file;
private static HashMap<Integer, Student> studentList;


public static void main(String[] args) {
file = new File("db.txt");
studentList = new HashMap<>();
Student student;
if (file.exists()) {
try (Scanner cin = new Scanner(file)) {
while (cin.hasNextInt()) {
student = new Student();
student.setStudentID(cin.nextInt());
student.setFieldID(cin.nextInt());
student.setFirstName(cin.next());
student.setLastName(cin.next());
studentList.put(student.getStudentID(), student);
}
} catch (FileNotFoundException ex) {
System.err.println("Error in reading. Error msg:" + ex.getMessage());
}
Scanner cin = new Scanner(System.in);
while (true) {
System.out.println("1- Search Student\n2- Add Student\n3- Delete Student");
int input = cin.nextInt();
switch (input) {
case 1:
int id = cin.nextInt();
if (!searchStudent(id)) {
System.out.println("Not found student with ID:" + id);
}
break;
case 2:
int sid = cin.nextInt();
int fid = cin.nextInt();
String fname = cin.next();
String lname = cin.next();
if (addStudent(sid, fid, fname, lname)) {
System.out.println("Added Successfully");
} else {
System.out.println("Failure!");
}
break;
case 3:


break;
default:
return;
}
}
} else {
System.err.println("Not found " + file.getName());
}
}


public static boolean deleteStudent(int studentID) {
Student student = studentList.get(studentID);
if (student == null) {
return false;
}
studentList.remove(studentID);
return rewriteFile();
}


public static boolean rewriteFile() {
try (PrintWriter printer = new PrintWriter(new FileOutputStream(file,false))) {
for (Student student : studentList.values()) {
printer.println(student.getStudentID() + " " + student.getFieldID()+ " " + student.getFirstName()+ " " + student.getLastName());
}
return true;
} catch (FileNotFoundException ex) {
System.err.println("Error in adding the student");
return false;
}
}


public static boolean searchStudent(int studentID) {
Student student = studentList.get(studentID);
if (student == null) {
return false;
}
System.out.println("First Name:" + student.getFirstName() + ", Last Name:" + student.getLastName() + ", Field ID:" + student.getFieldID());
return true;
}


public static boolean addStudent(int studentID, int fieldID, String firstName, String lastName) {
if (studentList.containsKey(studentID)) {
return false;
}
try (PrintWriter printer = new PrintWriter(file)) {
printer.println(studentID + " " + fieldID + " " + firstName + " " + lastName);
return true;
} catch (FileNotFoundException ex) {
System.err.println("Error in adding the student");
return false;
}
}
}

mehran34
پنج شنبه 15 مهر 1395, 16:45 عصر
اگر بخواهم چند فایلی باشه یعنی چند تا دیتابیس جدا وجود داشته باشه هم این روش کار میکنه؟ لطفا همینطور مثل بالا توضیح بدید خیلی ممنون بابت پاسخ بسیار خوبت وحید جان

vahid-p
پنج شنبه 15 مهر 1395, 16:58 عصر
بله. کافیه هر فایلی میخوای اسمش رو وارد کنی به جای db.txt

باید مشخص کنی بر چه اساسی اینکار رو میخوای انجام بدی. مثلا یه راهش اینه هر رشته (چون کدش یکسانه) تو یه فایل ذخیره کنی.

خلاصه اینکه اگر کد بالا رو بخونی و بفهمی، میتونی بر اساس تصمیم و طراحی خودت تغییرش بدی