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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

袁志娜

高级黑马

  • 黑马币:373

  • 帖子:697

  • 精华:0

© 袁志娜 高级黑马   /  2016-8-31 18:23  /  1964 人查看  /  23 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

1. 键盘每录入一次数据就将录入的数据在文件中存放成一行
2. 文件中最多存放5
3.根据数据存放的时间上下排序,最早录入的在最后一行,最后录入的数据在文件的第一行

23 个回复

倒序浏览
本帖最后由 水月灬清影 于 2016-8-31 19:09 编辑

面试?模拟栈?还是随机访问流的追加写入?
回复 使用道具 举报
水月灬清影 发表于 2016-8-31 19:03
面试?模拟栈?还是随机访问流的追加写入?

随机流加入
回复 使用道具 举报
面试考的?考这不麻爪了……我调了快40分钟……
[Java] 纯文本查看 复制代码
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Scanner;

public class Demo {
	public static void main(String[] args) throws IOException {
		RandomAccessFile raf =new RandomAccessFile("a.txt", "rw");
		Scanner sc=new Scanner(System.in);
		int i=5;
		while(i>0){
			System.out.println("请输入数据");
			String s = sc.nextLine();
			i--;
			
			raf.seek(0);
			StringBuilder sb=new StringBuilder();
			String temp =null;
			while((temp=raf.readLine())!=null){
				sb.append(temp+"\r\n");
			}
			
			raf.seek(0);
			raf.writeBytes(s+"\r\n");
			raf.writeBytes(sb.toString());
		}
		raf.close();
	}
}
回复 使用道具 举报
水月灬清影 发表于 2016-8-31 19:50
面试考的?考这不麻爪了……我调了快40分钟……
[mw_shl_code=java,true]import java.io.IOException;
impo ...

谢谢,还要用倒序写出来,心塞塞
回复 使用道具 举报
* 分析:
*        像FileWriter这些一般文件输出流,
*        每次使用write方法,只能在文件内容末尾写入,
*        不能添加到文件开头。
*
*        即便是RandomAccessFile文件随机访问流,
*        可以用seek(0)方法,将指针指到文件开头。
*        但是执行其write方法是从文件开头覆盖,而不是添加!
*
*        所以对我们一般的新学员来说
*        最简单的解决方案,当然还是使用一般的FileWriter
*        不过得换一下思路:
*        在5次输入循环中,每次键盘录入,
*        就将录入内容用insert(index,String)方法添加到StringBuilder第一行
*        每次循环创建一次FileWriter对象,
*        将StringBuilder内容写入到"out.txt"文件中
*        每次写完后,关闭流,下次循环再重新创建FileWriter对象
*        如此完全可以符合提议要求,代码很简单


[Java] 纯文本查看 复制代码
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

public class Test02 {

	public static void main(String[] args) throws IOException {
		//创建Scanner键盘录入对象
		Scanner sc = new Scanner(System.in);
		//声明字符文件输出流FileWriter
		FileWriter fw = null;
		//创建StringBuilder对象
		StringBuilder sb = new StringBuilder();
		//创建键盘录入接受字符串str
		String str = null;
		
		//for循环5次,键盘录入写入文件5次
		for (int i = 0; i < 5; i++) {
			//打印键盘录入提示
			System.out.println("请输入第" + (i + 1) + "行文本:");
			//获取键盘录入字符串 + 换行符
			str = sc.next() + "\r\n"; 
			//调用insert方法,将刚录入的字符串,添加到StringBuilder对象第一行
			sb.insert(0, str);
			//创建FileWriter对象 输出"out.txt"文件
			fw = new FileWriter("out.txt");
			//将StringBuilder对象内容写入"out.txt"文件
			fw.write(sb.toString());
			//刷新FileWriter流
			fw.flush();
			//关闭FileWriter流
			fw.close();
		}
		
		//关闭Scanner键盘录入对象
		sc.close();
	}

}


回复 使用道具 举报
怎么实现的?第三个尤其是。
回复 使用道具 举报
zhangsen89 发表于 2016-9-1 19:11
* 分析:
*        像FileWriter这些一般文件输出流,
*        每次使用write方法,只能在文件内容末尾写入,

你这个写得好,insert(index,String)用的很精彩,我昨天把这个问题想复杂了。
回复 使用道具 举报
/*优点是实时更新,每输入一次数据就会更新文本
缺点是每次都创建流,消耗资源*/
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.LinkedList;
import java.util.Scanner;

public class Test {
public static void main(String[] args) throws Exception {
        Scanner scanner=new Scanner(System.in);
        //存放要写入的数据
        LinkedList<String>list=new LinkedList<String>();
//不断从键盘读入数据
while (true) {
BufferedReader br=new BufferedReader(new FileReader(new File("aaa.txt")));
String len;
//读取已经存放的数据,放入到list中
while ((len=br.readLine())!=null) {
                list.add(len);
}
br.close();
//因为文本最多保存5行,继续写入会覆盖最早写入的数据
if (list.size()==5) {
//如果文件已经有了5行,就把最早的数据删了
        list.remove(4);
}
//把从键盘得到的数据插入到表头
        list.add(0,scanner.nextLine());
BufferedWriter br=new BufferedWriter(new FileWriter(new File("aaa.txt")));
//遍历list并写入到文件中
while (list.size()>0) {
        br.write(list.remove(0));
        br.newLine();
}
br.close();
}
}
}
回复 使用道具 举报
zhangsen89 发表于 2016-9-1 19:11
* 分析:
*        像FileWriter这些一般文件输出流,
*        每次使用write方法,只能在文件内容末尾写入,

不是的,问题要求不是只输入五次,可以一直输入,最后存的时候存五行,我就是审错题了,.............
回复 使用道具 举报
gsa798780633 发表于 2016-9-2 00:46
/*优点是实时更新,每输入一次数据就会更新文本
缺点是每次都创建流,消耗资源*/
import java.io.BufferedR ...

这个可以有
回复 使用道具 举报
public class Text_03 {

        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                try {
                        BufferedWriter bw = new BufferedWriter(new FileWriter("data"));
                        BufferedReader br = new BufferedReader(new FileReader("data"));
                        StringBuilder sb = new StringBuilder();
                        int a = 1;
                        while (a <= 5) {
                                System.out.println("请输入字第" + (a++) + "个符串:");
                                String str = sc.nextLine();
                                sb.append(str + " ");
                                }
                        String[] sArr = sb.toString().split(" ");
                        for (int i = sArr.length - 1; i >= 0; i--) {
                                bw.write(sArr[i]);
                                bw.newLine();
                        }
                        bw.close();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }

        }

}
回复 使用道具 举报
梦想的小草 发表于 2016-9-2 22:28
public class Text_03 {

        public static void main(String[] args) {

谢谢,思路逻辑感好强
回复 使用道具 举报
袁志娜 发表于 2016-9-3 22:24
谢谢,思路逻辑感好强

没有!我好多都不会,这题应该不是这么写的,应该让一直循环,一直能输入才对,只是存5句而已,我今天从新写了一下,还有一个小问题没来得及解决{:2_33:}
回复 使用道具 举报
梦想的小草 发表于 2016-9-3 22:29
没有!我好多都不会,这题应该不是这么写的,应该让一直循环,一直能输入才对,只是存5句而已,我今天从 ...

我感觉这样还可以,如果你想继续输入的话,就要把最后输入的值给remove出去,现在能这样做已经很棒了
回复 使用道具 举报
表示看不太懂,还要继续学习的节奏
回复 使用道具 举报
袁志娜 发表于 2016-9-3 22:38
我感觉这样还可以,如果你想继续输入的话,就要把最后输入的值给remove出去,现在能这样做已经很棒了 ...

恩 ,但是这样写得的话会产生另一个问题{:2_40:},不过在考试的时候没时间想那么多,就真的是这样录入5个了,你考试黑马了吗?我过几天也要考了,好紧张呀
回复 使用道具 举报
天河边吃紫英 发表于 2016-9-3 22:39
表示看不太懂,还要继续学习的节奏

加油,如果可以建议走社招,这样比较简单
回复 使用道具 举报
梦想的小草 发表于 2016-9-3 22:43
恩 ,但是这样写得的话会产生另一个问题,不过在考试的时候没时间想那么多,就真的是这样录入5个 ...

加个Q号吧,我的:974936237,细聊
回复 使用道具 举报
自强不息,努力向前
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马