Member 14030709 Ответов: 2

Почему я не могу написать файл


public class Runable {
	Scanner scan = new Scanner(System.in);
	ArrayList<ExperienceCandidate> experienceList = new ArrayList<>();

	// PRINT OUT MAIN MENU
	public void printMainMenu() {
		System.out.println("---Candidate Management System---");
		System.out.println("1. Experience");
		System.out.println("2. Display");
		System.out.println("3. Write to file using thread");
		System.out.println("4. Display all of the candidate by table format");
		System.out.println("5. Exit");
	}

	// GET MAIN MENU CHOICE
	public int getMainMenuChoice() {
		int choice = 0;
		do {
			try {
				System.out.print("Enter your choice: ");
				choice = Integer.parseInt(scan.nextLine()); // out of range check
				if (choice < 1 || choice > 5) {
					System.out.println("Out of range. Please choose 1 to 5 only");
					System.out.println();
				}
			} catch (NumberFormatException e) { // check if input is not number
				System.out.println(e.getMessage() + "is not a number. Please choose 1 to 5 only");
				System.out.println();
			}
		} while (choice < 1 || choice > 5);
		return choice;
	}

	public void methodStart() throws IOException {
		boolean end = false;
		Path data = Paths.get("H:\\Java Core\\Eclispse\\Assignment 5\\JPL.M.A101\\output.txt");
		if (!Files.exists(data)) {
			Files.createFile(data);
		} else {
			System.out.println("File is existed");
		}
		do {
			// MAIN MENU
			// print out main menu and get user choice
			int choice;
			printMainMenu();
			choice = getMainMenuChoice();

			// THE FUNCTIONS
			switch (choice) {
				case 1://Create information object
					create();				
					break;
				case 2://display object
					display();
					break;
				case 3://write
					writeCandidatesIntoTextFile thread1 = new writeCandidatesIntoTextFile();
					thread1.start();
					break;
				case 4:
	
					break;
				case 5:
					end = true;
					break;
			}
		} while (end == false);

	}

	public void create() {
		String id;
		String firstName;
		String lastName;
		String birthDate;
		String address;
		String phone;
		String email;
		String proSkill;
		int expInYear;
		boolean addMoreExpe;
		do {
			System.out.println();
			System.out.println("Create experience candidate");

			id = Validate.getId();
			firstName = Validate.getFirstName();
			lastName = Validate.getLastName();
			birthDate = Validate.getDate();
			address = Validate.getAdress();
			phone = Validate.getPhone();
			email = Validate.getCandidateEmail();
			expInYear = Validate.getExpYear();
			proSkill = Validate.getProSkill();
			experienceList.add(new ExperienceCandidate(id, firstName, lastName, birthDate, address, phone, email,
					expInYear, proSkill));
			addMoreExpe = Validate.ynVal();
		} while (addMoreExpe == true);
	}

	public void display() {
		for (int i = 0; i < experienceList.size(); i++) {
			System.out.println(experienceList.get(i).toString());
		}
	}

}
class writeCandidatesIntoTextFile extends Thread {

	@Override
	public void run() {
		ArrayList<ExperienceCandidate> experienceList = new ArrayList<>();
		Path data = Paths.get("H:/Java Core/Eclispse/Assignment 5/JPL.M.A101/output.txt");
		OutputStream out = null;
		try {
			for (int i = 0; i < experienceList.size(); i++) {
				byte[] dataf = experienceList.get(i).toString().getBytes();
				out = new BufferedOutputStream(
						Files.newOutputStream(data, StandardOpenOption.CREATE, StandardOpenOption.APPEND));
				out.write(dataf, 0, dataf.length);
			}

		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (out != null) {
				try {
					out.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

}


Что я уже пробовал:

Я не знаю, почему мое приложение не может писать в файл. Функции добавления и отображения в порядке.
Я создал файл, но приложение не записывало данные. Пожалуйста, помогите! Я думаю, что проблема заключается в классе writeCandidatesIntoTextFile extends Thread

0x01AA

Может быть, у вас есть подсказка для такого тупого, как я, где происходит проблема?

Member 14030709

В классе writeCandidatesIntoTextFile(). Я не знаю, в чем проблема. Он создает файл output.txt но не записывает данные

2 Ответов

Рейтинг:
9

Member 14030709

Функция добавления и отображения все в порядке, если в моем списке нет данных, функция отображения не будет работать. Поэтому я сказал, что добавить и отобразить все в порядке.


Richard MacCutchan

Прочтите мое решение выше: вы не добавляете никаких данных в experienceList, поэтому вам нечего записывать в файл.

Рейтинг:
12

Richard MacCutchan

		ArrayList<ExperienceCandidate> experienceList = new ArrayList<>();

// other lines of code, but you never add any data to experienceList
// so size will return zero.
			for (int i = 0; i < experienceList.size(); i++) {

И почему вы запускаете это в отдельном потоке для простого консольного приложения?