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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

最近在进行入学考试,有一道题目要向一个txt文件写入内容,我想了老师要拿到我的项目要能看到写入内容,路径必须是正确的。
所以,我将txt文件放到src目录下,然后路径这样写:
BufferedWriter bw = new BufferedWriter(new FileWriter("stu.txt"));
然后我测试一下 bw.write("abc");
但是没能写进去,很失望的说。
然后网上查了一下
String filename = Test2.class.getClassLoader().getResource("stu.txt").getFile();

bw = new BufferedWriter(new FileWriter(filename));
还是没能写进去,请教各位,是哪里出了问题?


20 个回复

倒序浏览
还有忘了说,就是我已经 bw.flush();了
回复 使用道具 举报
刷新一下目录没出来吗{:3_66:}上源码看看
回复 使用道具 举报
我把路径换成这样,对了,bw = new FileWriter("src/stu.txt", true);
但是我记得以前好像在src下 直接写src下的文件就行,不是这样写的啊,
这样写老师拿到我的项目,路径会正确吗?
回复 使用道具 举报
  1. package com.itheima;

  2. import java.io.*;
  3. import java.util.*;

  4. /**
  5. *
  6. * 第2题:有五个学生,每个学生有3门课(语文、数学、英语)的成绩,写一个程序接收从键盘输入学生的信息,输入格式为:name,30,30,30(姓名,
  7. * 三门课成绩),然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中。要求:stu.txt文件的格式要比较直观,打开这个文件,
  8. * 就可以很清楚的看到学生的信息。
  9. *
  10. */
  11. public class Test2 {

  12.         public static void main(String[] args) throws IOException {
  13.                 //定义学生成绩
  14.                 StudentScore ss = null;
  15.                 //创建学生管理系统
  16.                 StudentManage sm = new StudentManage();
  17.                 //读取键盘录入
  18.                 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));       
  19.                 //定义一行数据
  20.                 String line = null;
  21.             //按照提示进行选择功能
  22.                 while (true) {
  23.                         System.out.println("请按以下提示选择功能");
  24.                         System.out.println("添加学生成绩请按1");
  25.                         System.out.println("查找学生成绩请按2");
  26.                         System.out.println("修改学生成绩请按3");
  27.                         System.out.println("注销学生信息请按4");
  28.                         System.out.println("排序输出所有学生信息请按5");
  29.                         System.out.println("退出请按0");
  30.                         //读取按下的数字
  31.                         String number = br.readLine();
  32.                         //根据数字选择功能
  33.                         if (number.equals("1")) {
  34.                                 System.out.println("请输入姓名:");
  35.                                 String name = br.readLine();
  36.                                 System.out.println("请输入语文成绩:");
  37.                                 double chineseScore = Double.parseDouble(br.readLine());
  38.                                 System.out.println("请输入数学成绩:");
  39.                                 double mathScore = Double.parseDouble(br.readLine());
  40.                                 System.out.println("请输入英语成绩:");
  41.                                 double englishScore = Double.parseDouble(br.readLine());
  42.                                 ss = new StudentScore(name, chineseScore, mathScore,
  43.                                                 englishScore);
  44.                                 sm.addScore(ss);

  45.                         } else if (number.equals("2")) {
  46.                                 System.out.println("请输入你要查找的学生姓名:");
  47.                                 String name = br.readLine();
  48.                                 sm.lookUp(name);
  49.                         } else if (number.equals("3")) {
  50.                                 System.out.println("请输入你要修改的学生姓名:");
  51.                                 String name = br.readLine();
  52.                                 System.out.println("请输入修改后的语文成绩:");
  53.                                 double chineseScore = Double.parseDouble(br.readLine());
  54.                                 System.out.println("请输入修改后的数学成绩:");
  55.                                 double mathScore = Double.parseDouble(br.readLine());
  56.                                 System.out.println("请输入修改后的英语成绩:");
  57.                                 double englishScore = Double.parseDouble(br.readLine());
  58.                                 sm.reviseScore(name, chineseScore, mathScore, englishScore);

  59.                         } else if (number.equals("4")) {
  60.                                 System.out.println("请输入你要注销的学生姓名:");
  61.                                 String name = br.readLine();
  62.                                 sm.delete(name);
  63.                         } else if (number.equals("5")) {
  64.                                 sm.scoreSort();

  65.                         } else if (number.equals("0")) {
  66.                                 System.out.println("祝您生活愉快,再见");
  67.                                 System.exit(0);

  68.                         } else {
  69.                                 System.out.println("输入有误");
  70.                         }

  71.                 }

  72.         }
  73. }

  74. /**
  75. *
  76. * 学生管理系统类 成员变量:ArrayList 方法:添加,查询,修改,注销学生信息
  77. *
  78. */
  79. class StudentManage {
  80.        
  81.         // 定义list,用来存储StudentScore对象
  82.         private List<StudentScore> list = null;

  83.         // 构造方法,初始化list
  84.         public StudentManage() {
  85.                 list = new ArrayList<StudentScore>();
  86.         }

  87.         public List<StudentScore> getList() {
  88.                 return list;
  89.         }

  90.         public void setList(List<StudentScore> list) {
  91.                 this.list = list;
  92.         }

  93.         // 添加学生成绩
  94.         public void addScore(StudentScore score)  {
  95.                 list.add(score);
  96.                
  97.                
  98.                 System.out.println("添加学生成绩成功");
  99.         }

  100.         // 查询学生成绩
  101.         public void lookUp(String name) {
  102.                 int i;
  103.                 for (i = 0; i < list.size(); i++) {
  104.                         StudentScore student = (list.get(i));
  105.                         if (name.equals(student.getName())) {

  106.                                 System.out.println("该学生信息为:");
  107.                                 System.out.println("姓名:" + name);
  108.                                 System.out.println("语文成绩: " + student.getChineseScore());
  109.                                 System.out.println("数学成绩: " + student.getMathScore());
  110.                                 System.out.println("英语成绩: " + student.getEnglishScore());
  111.                                 break;

  112.                         }
  113.                 }
  114.                 if (i == list.size()) {
  115.                         System.out.println("对不起,没有此学生信息");
  116.                 }

  117.         }

  118.         // 修改学生成绩
  119.         public void reviseScore(String name, double chineseScore, double mathScore,
  120.                         double englishScore) {
  121.                 System.out.println(chineseScore);
  122.                 int i = 0;
  123.                 for (i = 0; i < list.size(); i++) {
  124.                         StudentScore student = list.get(i);
  125.                         System.out.println(chineseScore);
  126.                         if (name.equals(student.getName())) {
  127.                                 System.out.println(chineseScore);
  128.                                 student.setChineseScore(chineseScore);
  129.                                 student.setMathScore(mathScore);
  130.                                 student.setEnglishScore(englishScore);
  131.                                 System.out.print(student.getChineseScore());
  132.                                 System.out.println("修改成绩成功 ");
  133.                                 break;

  134.                         }

  135.                 }
  136.         }

  137.         // 注销学生信息
  138.         public void delete(String name) {
  139.                 int i = 0;
  140.                 if (list.size() == 0) {
  141.                         System.out.println("对不起,学生信息列表为空,请添加学生信息");
  142.                 }
  143.                 for (i = 0; i < list.size(); i++) {
  144.                         StudentScore student = list.get(i);
  145.                         if (name.equals(student.getName())) {
  146.                                 list.remove(i);
  147.                                 System.out.print("注销学生信息成功");

  148.                         }
  149.                         break;
  150.                 }
  151.                 if (i == list.size() && (list.size() != 0)) {
  152.                         System.out.println("对不起,没有此学生信息");
  153.                 }

  154.         }

  155.         // 按学生成绩总分从高到低进行排序
  156.         public void scoreSort() throws IOException {
  157.                 FileWriter fw = null;

  158.                 Collections.sort(list);
  159.                 for (int i = list.size() - 1; i >= 0; i--) {

  160.                         String s = list.get(i).getInfo();
  161.                         fw = new FileWriter("src/stu.txt", true);

  162.                         fw.write(s);
  163.                         fw.write("\r\n");
  164.                         fw.flush();
  165.                         System.out.println(s);

  166.                 }
  167.         }

  168. }

  169. /**
  170. *
  171. * 学生成绩类 成员变量:语文,数学,英语成绩 方法:get();set();
  172. */
  173. class StudentScore implements Comparable<StudentScore> {
  174.         // 定义学生姓名
  175.         private String name;

  176.         // 定义语文,数学,英语成绩
  177.         private double chineseScore, mathScore, englishScore;
  178.         // 定义总成绩
  179.         private double sum;

  180.         // 带参数的构造方法,初始化语文,数学,英语成绩
  181.         public StudentScore(String name, double chineseScore, double mathScore,
  182.                         double englishScore) {
  183.                 this.name = name;
  184.                 this.chineseScore = chineseScore;
  185.                 this.mathScore = mathScore;
  186.                 this.englishScore = englishScore;
  187.                 this.sum = chineseScore + mathScore + englishScore;
  188.         }

  189.         // 自定义定义对象的比较规则
  190.         public int compareTo(StudentScore o) {

  191.                 return Double.valueOf(this.sum).compareTo(Double.valueOf(o.sum));
  192.         }

  193.         // 定义获取学生成绩信息的方法
  194.         public String getInfo() {
  195.                 return "姓名 :" + name + ";语文成绩: " + chineseScore + ";数学成绩: " + mathScore
  196.                                 + ";英语成绩: " + englishScore + ";总成绩: " + sum;
  197.         }

  198.         public String getName() {
  199.                 return name;
  200.         }

  201.         public void setName(String name) {
  202.                 this.name = name;
  203.         }

  204.         public double getChineseScore() {
  205.                 return chineseScore;
  206.         }

  207.         public void setChineseScore(double chineseScore) {
  208.                 this.chineseScore = chineseScore;
  209.         }

  210.         public double getMathScore() {
  211.                 return mathScore;
  212.         }

  213.         public void setMathScore(double mathScore) {
  214.                 this.mathScore = mathScore;
  215.         }

  216.         public double getEnglishScore() {
  217.                 return englishScore;
  218.         }

  219.         public void setEnglishScore(double englishScore) {
  220.                 this.englishScore = englishScore;
  221.         }

  222. }
复制代码
回复 使用道具 举报
直接写相对路径就O了。。。就写本目录下啊
回复 使用道具 举报
楼主,我刚才试了下,的确是这样,原因是因为你把文件路径写错了,new FileWriter("stu.txt")会重新创建一个文件,而这个新创建的文件并不在src目录下,而且这个文件,你在Eclipse上是看不到的,你进入src文件夹,会看到一个stu.txt的文件,而在src目录外还有一个stu.txt文件,这个文件里是有内容“abc”的,这个文件才是你执行代码时,自动创建的文件。

说了这么多,你明白了吗
回复 使用道具 举报
我还是截图跟你说明下好了

QQ图片20150205121139.png (3.68 KB, 下载次数: 20)

这里的stu.txt就是你手动创建的,

这里的stu.txt就是你手动创建的,

QQ图片20150205121222.jpg (20.27 KB, 下载次数: 25)

这里的src目录外的stu.txt文件是执行代码时自动创建的,在eclipse上,你是看不到这个文件的 ...

这里的src目录外的stu.txt文件是执行代码时自动创建的,在eclipse上,你是看不到这个文件的 ...

QQ图片20150205121242.jpg (18.17 KB, 下载次数: 24)

这是在src目录里,还有一个stu.txt,这就是你手动创建的

这是在src目录里,还有一个stu.txt,这就是你手动创建的

点评

到不是刷新的问题,怎么刷都看不到另一个stu.txt  发表于 2015-2-5 13:57
刷新项目就可以看到那个文件啦  发表于 2015-2-5 12:54
回复 使用道具 举报 1 0
好久都没有写IO了
回复 使用道具 举报
基础很重要啊
回复 使用道具 举报
俺做android开发 发表于 2015-2-5 12:17
我还是截图跟你说明下好了

谢谢,我明白你的意思了,那老师拿到我的项目,能保证路径正确,
用“stu.txt”和“src/stu.txt”这两个路径,应该都行,对吧
回复 使用道具 举报
奔跑的猴子 来自手机 中级黑马 2015-2-5 14:04:10
12#
马克,学完IO再回来看
回复 使用道具 举报
俺做android开发 发表于 2015-2-5 12:07
楼主,我刚才试了下,的确是这样,原因是因为你把文件路径写错了,new FileWriter("stu.txt")会重新创建一 ...

并不是刷新的问题,我刷了几次还是没看到另一个stu.txt
回复 使用道具 举报
楼主,最后在和你说下吧,f.getAbsoluteFile() == D:\JAVA\15_java\stu.txt
                                    f.getPath()  == stu.txt
JAVA是我的工作区,
15_java是java工程目录,
你的代码执行时,自动创建的stu文件是直接放在工程目录下的,路径是 D:\JAVA\15_java\stu.txt
而你手动创建的stu文件,路径是 D:\JAVA\15_java\src\stu.txt

评分

参与人数 1黑马币 +1 收起 理由
mengxiang1993 + 1 很给力!

查看全部评分

回复 使用道具 举报
俺做android开发 发表于 2015-2-5 14:05
并不是刷新的问题,我刷了几次还是没看到另一个stu.txt

我帖子里的路径你是刷不出来的,我帖子里的路径是(src/stu.txt),那个stu.txt是我手动创建的;
版主的意思是,我的路径要写成(“stu.txt”)这样可以刷出来,这个stu.txt是程序运行时创建的,你试哈。
我的意思是这两种路径被拿到另外一台电脑上,应该都不会出错。
回复 使用道具 举报
回复了你5次,今天的黑马币也都到手了
回复 使用道具 举报
俺做android开发 发表于 2015-2-5 14:20
回复了你5次,今天的黑马币也都到手了

给你加了个黑马币,多谢了。
我想这两种路径被拿到另外一台电脑,也就是老师烤过去,都不会出错吧
回复 使用道具 举报
直接写stu.txt就可以了,相对路径
你没发现 它导入的包都没你自己的文件夹的路径吗
回复 使用道具 举报
xiaoyi 发表于 2015-2-5 14:42
直接写stu.txt就可以了,相对路径
你没发现 它导入的包都没你自己的文件夹的路径吗 ...

我写的(src/stu.txt)这个就是相对路径
完整的路径D:\JavaProject\Test2\src\a.txt
老师拿到我的java项目,就有src这个目录啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马