A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

今天写了个程序,编译完了没有报错,运行时,说“系统找不到指定文件”。请大家帮帮忙,宝宝现在很着急!

9 个回复

倒序浏览
回复 使用道具 举报
你写的是io程序吗?系统找不到指定的文件,最有可能你写的路径有问题,java程序运行时根据路径找不到你的那个文件。
回复 使用道具 举报
linzpcom 发表于 2017-3-9 15:05
你写的是io程序吗?系统找不到指定的文件,最有可能你写的路径有问题,java程序运行时根据路径找不到你的那 ...

是的!这是代码
[Java] 纯文本查看 复制代码
package kejian;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;

/*
 * 学生管理系统IO版本
 * 分析:
 * 	1.创建学生类,包含学号,姓名,年龄,居住地
 * 	2.创建一个存储学生的集合
 * 	3.打印功能菜单
 * 	4.获取用户输入的功能选项
 * 	5.根据用户输入的功能选项,选择对应的功能(switch,if)
 * 		输入1:调用查看所有学生的方法
 * 		输入2:调用添加学生的方法
 * 		输入3:调用删除学生的方法
 * 		输入4:调用修改学生的方法
 * 		输入5:退出系统
 * 		输入其它数字:提示用户"您输入的功能不存在,请重新输入!"
 *  6.添加一个死循环,让功能重复执行3-5
 */
public class StudentManage {
	public static void main(String[] args) throws IOException {
		// 定义一个读写数据的文件路径
		String fileName = "g.txt";
		while (true) {
			// 打印功能菜单
			System.out.println("       学生管理系统         ");
			System.out.println("1.查看所有学生");
			System.out.println("2.添加学生");
			System.out.println("3.删除学生");
			System.out.println("4.修改学生");
			System.out.println("5.退出系统");
			System.out.println("请输入您的选择");
			// .获取用户输入的功能选项
			Scanner sc = new Scanner(System.in);
			int choose = sc.nextInt();
			switch (choose) {
			case 1:
				findAllStudent(fileName);
				break;

			case 2:
				addStudent(fileName);
				break;

			case 3:
				deletStudent(fileName);
				break;

			case 4:
				updateStudent(fileName);
				break;

			case 5:
				System.out.println("程序已经结束");
				System.exit(0);// 终止当前正在执行的Java虚拟机 0:正常终止,其它数字:异常终止
				break;

			default:
				System.out.println("您输入的功能不存在,请重新输入");
				break;

			}
		}
	}

	// 定义一个把集合中的数据写到文件中的方法
	public static void writeDate(String fileName, ArrayList<Student> list) throws IOException {
		// 创建一个字符输出缓冲流对象,并绑定目的地、
		BufferedWriter bw = new BufferedWriter(new FileWriter(fileName));
		// 遍历集合,
		for (int i = 0; i < list.size(); i++) {
			Student s = list.get(i);
			// 创建一个字符串增加器
			StringBuilder b = new StringBuilder();
			b.append(s.getName()).append(",").append(s.getID()).append(",").append(s.getAge()).append(",")
					.append(s.getAddress());
			bw.write(b.toString());
			// 换行
			bw.newLine();
			// 刷新,提高效率
			bw.flush();
		}
		bw.close();
	}

	// 定义一个把文件中的内容存储到集合中的方法
	public static void readDate(String fileName, ArrayList<Student> list) throws IOException {

		// 创建字符输入缓冲流对象,并绑定数据源
		BufferedReader br = new BufferedReader(new FileReader(fileName));
		// 定义一个变量
		String line;
		// 调用一次读取一行的方法
		while ((line = br.readLine()) != null) {
			// 调用字符串分割的方法
			String[] arr = line.split(",");
			// 创建学生对象并赋值
			Student s = new Student(arr[0], arr[1], arr[2], arr[3]);
			// 往集合中添加元素
			list.add(s);
		}
		br.close();
	}

	// 定义一个修改学生的方法
	public static void updateStudent(String fileName) throws IOException {
		// 创建一个存储学生的集合
		ArrayList<Student> list = new ArrayList<Student>();
		// 调用从文件中存储到集合的方法
		readDate(fileName, list);
		// 键盘录入要修改的学生学号
		Scanner sc = new Scanner(System.in);

		System.out.println("请输入要修改的学生学号");
		String ID = sc.nextLine();

		for (int i = 0; i < list.size(); i++) {
			Student s = list.get(i);
			String thisID = s.getID();
			if (ID.equals(thisID)) {
				System.out.println("请输入学生的新姓名");
				String name = sc.nextLine();
				System.out.println("请输入学生的新年龄");
				String age = sc.nextLine();
				System.out.println("请输入学生的新居住地");
				String address = sc.nextLine();
				s.setName(name);
				s.setAge(age);
				s.setAddress(address);

				// 调用把集合中的数据存储到文件中的方法
				writeDate(fileName, list);

				// 给用户提示,修改成功
				System.out.println("学生修改成功");
				return;
			}
			System.out.println("您输入的学生学号不存在,请重新输入");
		}
	}

	// 定义一个删除学生的方法
	public static void deletStudent(String fileName) throws IOException {
		// 创建一个存储学生的集合
		ArrayList<Student> list = new ArrayList<Student>();
		// 调用从文件中读取数据存储到集合的方法
		readDate(fileName, list);
		// 键盘录入要删除的学生学号
		Scanner sc = new Scanner(System.in);

		System.out.println("请输入要删除的学生学号");
		String ID = sc.nextLine();

		// 遍历集合、
		for (int i = 0; i < list.size(); i++) {
			String thisID = list.get(i).getID();
			if (ID.equals(thisID)) {
				list.remove(i);
				// 调用把集合中元素写到文件中的方法
				writeDate(fileName, list);
				System.out.println("删除成功");
				return;
			}
		}
		System.out.println("您输入的学号不存在,请重新输入");
	}

	// 定义一个添加学生的方法
	public static void addStudent(String fileName) throws IOException {
		// 创建一个存储学生的集合,用于存储从文件中读取的数据
		ArrayList<Student> list = new ArrayList<Student>();
		// 调用把文件中的内容添加到集合中的方法
		readDate(fileName, list);
		Scanner sc = new Scanner(System.in);
		// 输入学号
		String ID;
		// 使用死循环,让输入学号的动作可以重复进行
		while (true) {
			System.out.println("请输入学生的学号:");
			ID = sc.nextLine();
			// 定义一个标记
			boolean flag = false;
//判断集合是为空
			if(list.size() == 0){
				System.out.println("请添加学生后,在执行此操作");
				return ;
			}else {
			// 遍历集合
			for (int i = 0; i < list.size(); i++) {
				Student s = list.get(i);
				if (ID.equals(s.getID())) {
					flag = true;
					break;
				}

				if (flag) {

					System.out.println("您输入的学号已经被占用,请重新输入");
				} else {
					break;
				}
			}
		}

		System.out.println("请输入学生的姓名");
		String name = sc.nextLine();
		System.out.println("请输入学生的年龄");
		String age = sc.nextLine();
		System.out.println("请输入学生的居住地");
		String address = sc.nextLine();

		// 创建学生对象
		Student s = new Student(name, ID, age, address);
		list.add(s);

		// 调用把集合中的数据存储到文件中的方法
		writeDate(fileName, list);
			System.out.println("学生添加成功");
	}
	}

	// 定义查看所有学生的方法
	public static void findAllStudent(String fileName) throws IOException {
		ArrayList<Student> list = new ArrayList<Student>();
		// 调用集合存储文件内容的方法
		readDate(fileName, list);
		if (list.size() == 0) {
			System.out.println("请添加学生在执行此操作");

		} else {
			// 打印表头
			System.out.println("姓名\t学号\t年龄\t居住地");
			// 遍历集合
			for (int i = 0; i < list.size(); i++) {
				Student s = list.get(i);
				System.out.println(s.getName() + "\t" + s.getID() + "\t" + s.getAge() + "\t" + s.getAddress());
			}
		}
	}

}
回复 使用道具 举报
String fileName = "g.txt";这个文件在那个包下,实在src下吗
回复 使用道具 举报
linzpcom 发表于 2017-3-9 15:27
String fileName = "g.txt";这个文件在那个包下,实在src下吗

不懂!第一次这么定义文件。看老师这么玩的,然后我玩了一下,根本找不到文件
回复 使用道具 举报
新建一个文件,你把这个文件放到src目录下,然后String fileName = "src/g.txt";
看明白了吗,这样做应该可以找到文件
回复 使用道具 举报
linzpcom 发表于 2017-3-9 20:03
新建一个文件,你把这个文件放到src目录下,然后String fileName = "src/g.txt";
看明白了吗,这样做应该可 ...

恩!谢了
回复 使用道具 举报
使用file的时候要注意的是绝对的路径和相对路径
回复 使用道具 举报
雪飞舞舞 发表于 2017-3-9 20:52
使用file的时候要注意的是绝对的路径和相对路径

恩!知道了,谢了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马