Я пытаюсь написать программу, которая управляет документом списка контактов, который пользователь имеет. Программа должна запрашивать у пользователя файл, который они хотят импортировать, а затем предоставить им параметры для отображения списка контактов, добавления контакта, удаления контакта и сохранения текущей версии контакта. Все в моем коде работает до тех пор, пока я не попытаюсь вывести файл. Я получаю «FileNotFoundException (слишком много файлов в системе)». Ниже мой код до сих пор:Как переписать существующий файл в программе Java?
import java.io.*;
import java.util.Scanner;
import java.util.TreeMap;
public class ContactList {
public static void main (String [] args) throws IOException
{
String contactFile = null;
Scanner input = new Scanner(System.in);
System.out.print("Enter name of contact file: ");
contactFile = input.next();
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(contactFile)));
TreeMap< String, String > contacts = new TreeMap< String, String >();
Contact contact = new Contact();
br.close();
menu();
int userChoice = input.nextInt();
while (userChoice != 4)
{
if (userChoice == 1)
{
menu();
userChoice = input.nextInt();
}
if (userChoice == 2)
{
System.out.print("Number of contacts to add: ");
int numContacts = input.nextInt();
for (int i = 0; i < numContacts; i++)
{
contact.setName(input.nextLine());
System.out.print("Enter contact's name (Last name, First name): ");
contact.setName(input.nextLine());
contact.setPhoneNumber(input.nextLine());
System.out.print("Enter contact's phone number (xxx-xxx-xxxx): ");
contact.setPhoneNumber(input.nextLine());
contact.setEmail(input.nextLine());
System.out.print("Enter contact's email (ex. [email protected]): ");
contact.setEmail(input.nextLine());
contacts.put(contact.getName(), contact.remainingInfo());
}
menu();
userChoice = input.nextInt();
}
if (userChoice == 3)
{
System.out.print("Enter name of contact you wish to remove (Last name, First name): ");
contacts.remove(input.nextLine());
menu();
userChoice = input.nextInt();
}
}
if (userChoice == 4)
{
PrintWriter outFile = new PrintWriter(contactFile);
outFile.print(contacts.entrySet());
}
}
public static void menu()
{
System.out.println("1 Display Contact List");
System.out.println("2 Add a Contact");
System.out.println("3 Remove a Contact");
System.out.println("4 Save Contact List and Exit");
System.out.print("Command: ");
}
}
И Контактная класс, если это необходимо:
public class Contact {
private String name;
private String phoneNumber;
private String email;
public void setName(String name) {
this.name = name;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public void setEmail(String email) {
this.email = email;
}
public String getName()
{
return name;
}
public String remainingInfo()
{
return phoneNumber + " " + email;
}
}
Есть ли способ, чтобы импортировать файл, внести изменения, перезаписать этот файл, и выход/сохранить Это? Я думал, что вывод отредактированного файла в одно и то же место будет перезаписывать его, но, видимо, нет.
Обновление: Сообщение об ошибке я получаю читает:
Exception in thread "main" java.io.FileNotFoundException: /Users/jesbarba/Desktop/Contacts.txt (Too many open files in system)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(FileOutputStream.java:270)
at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
at java.io.FileOutputStream.<init>(FileOutputStream.java:101)
at java.io.PrintWriter.<init>(PrintWriter.java:184)
at ContactList.main(ContactList.java:70)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Это при использовании IntelliJ
где ваш код для вывода файла? – ControlAltDel
Является ли «FileNotFoundException (слишком много файлов в системе)» точного сообщения об ошибке или вы переводите его с другого языка? Если это так, и это linux/unix, можете ли вы запустить LANG = C LC_ALL = C java ContactList', чтобы получить английские сообщения? –
@thatotherguy Обновленный вопрос, чтобы отразить точное сообщение об ошибке, которое я получаю. – Jes