黑马程序员技术交流社区

标题: 系统找不到指定文件怎么解!急!急!急! [打印本页]

作者: 亮仔开发    时间: 2017-3-9 12:31
标题: 系统找不到指定文件怎么解!急!急!急!
今天写了个程序,编译完了没有报错,运行时,说“系统找不到指定文件”。请大家帮帮忙,宝宝现在很着急!

作者: starhub    时间: 2017-3-9 13:33
截图看看

作者: linzpcom    时间: 2017-3-9 15:05
你写的是io程序吗?系统找不到指定的文件,最有可能你写的路径有问题,java程序运行时根据路径找不到你的那个文件。
作者: 亮仔开发    时间: 2017-3-9 15:23
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());
                        }
                }
        }

}

作者: linzpcom    时间: 2017-3-9 15:27
String fileName = "g.txt";这个文件在那个包下,实在src下吗
作者: 亮仔开发    时间: 2017-3-9 19:53
linzpcom 发表于 2017-3-9 15:27
String fileName = "g.txt";这个文件在那个包下,实在src下吗

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

恩!谢了
作者: 雪飞舞舞    时间: 2017-3-9 20:52
使用file的时候要注意的是绝对的路径和相对路径
作者: 亮仔开发    时间: 2017-3-9 21:37
雪飞舞舞 发表于 2017-3-9 20:52
使用file的时候要注意的是绝对的路径和相对路径

恩!知道了,谢了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2