关于 FileReader 问题

Sally_simple 2014-01-06 04:23:56
如果让FileReader里的内容随着输入的int或是String 的变化输出。

比如:
输入数字 2, 用 new BufferedReader(new FileReader())就能够找到 file2;
输入数字 3, 就能找到file3.

随着输入的变化,文件的内容也在变化。
这个该如何实现啊?
谢啦~
...全文
1148 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sally_simple 2014-01-08
  • 打赏
  • 举报
回复
引用 16 楼 yuan514168845 的回复:
		System.out.println("the file");
        Scanner scanner = new Scanner(System.in);
        int i = scanner.nextInt();
        try {
			BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\Administrator\\Desktop\\file"+i+".txt"));
			String s =null;
			StringBuilder sb=new StringBuilder();
			while((s=br.readLine())!=null)
			{
				System.out.println(s);
				
				if(s!=null)
				{
					sb.append(s+'\r');
				}
				
			}
			
			String temp = sb.toString();
			String[] array=temp.split("\\r");
			String[] s1=array[0].split("\\s+");
			String[] s2=array[1].split("\\s+");
			for(int k=0;k<s1.length;k++)
			{
				System.out.println(s1[i].equals(s2[i]));
				
			}
			
		
		} catch (IOException e) {
			e.printStackTrace();
		}
    
		
看看这个行吗?
这个可以实现,很好,完美 谢谢啦~
汐哉 2014-01-07
  • 打赏
  • 举报
回复
首先,你是要根据你的输入,读取不同的文件: BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\Administrator\\Desktop\\file1.txt")) 你的这个方法来读取的话,你可以尝试:"C:\\Users\\Administrator\\Desktop\\file"+"i"+".txt");如果你的文件名字确定了是file(i)这样的话,这是可以读取到的。 第二个,你的String数据要以二维数组的方式保存下来,就是一个基本的二维数组声明。如果你有比较特殊的需求,你的需求要明确点。
  • 打赏
  • 举报
回复
		System.out.println("the file");
        Scanner scanner = new Scanner(System.in);
        int i = scanner.nextInt();
        try {
			BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\Administrator\\Desktop\\file"+i+".txt"));
			String s =null;
			StringBuilder sb=new StringBuilder();
			while((s=br.readLine())!=null)
			{
				System.out.println(s);
				
				if(s!=null)
				{
					sb.append(s+'\r');
				}
				
			}
			
			String temp = sb.toString();
			String[] array=temp.split("\\r");
			String[] s1=array[0].split("\\s+");
			String[] s2=array[1].split("\\s+");
			for(int k=0;k<s1.length;k++)
			{
				System.out.println(s1[i].equals(s2[i]));
				
			}
			
		
		} catch (IOException e) {
			e.printStackTrace();
		}
    
		
看看这个行吗?
pcmlose 2014-01-07
  • 打赏
  • 举报
回复
实现数组的,输入 1 2 3 4 4 5 6 就会变成二维数组 新的一行输入-1就表示完毕
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class TestString2Array {
    public static void main(String[] args) {
        Integer[][] a = getArrays();

        for (Integer[] i : a) {
            for (int j : i) {
                System.out.print(j + " ");
            }
            System.out.println();
        }

    }

    public static Integer[][] getArrays() {
        Scanner scan = new Scanner(System.in);
        List<Integer[]> list = new ArrayList<Integer[]>();
        while (scan.hasNext()) {
            String line = scan.nextLine();
            if (line.equals("-1")) {
                break;
            }
            Scanner lineScan = new Scanner(line);
            List<Integer> lineList = new ArrayList<Integer>();
            while (lineScan.hasNext()) {
                int i = lineScan.nextInt();
                lineList.add(i);
            }
            list.add(lineList.toArray(new Integer[lineList.size()]));
        }
        Integer[][] array = new Integer[list.size()][];
        list.toArray(array);
        return array;
    }

}
oh_Maxy 2014-01-07
  • 打赏
  • 举报
回复
引用 9 楼 Sally_simple 的回复:
[quote=引用 8 楼 oh_Maxy 的回复:] 根据输入,选择文件打印,这样行不

    public static void main(String[] args) {
        System.out.println("the file");
        Scanner scanner = new Scanner(System.in);

        // 为-1时,结束文件打印
        int i;
        while (-1 != (i = scanner.nextInt())) {
            printFile(i);
        }
    }

    private static void printFile(int i) {
        BufferedReader br = null;
        try {
            br = new BufferedReader(new InputStreamReader(new FileInputStream((new File(
                    "C:\\Users\\Administrator\\Desktop\\file" + i + ".txt")))));
            String s = null;
            while ((s = br.readLine()) != null) {
                System.out.println(s);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (null != br) {
                    br.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
这个只能打印出文件的内容~不能实现数组啊~[/quote] 既然能打印出来,就一定有办法实现赋值到数组的,LZ也要自己思考下。那个printFile,你可以return一个数组,或者入参多传递一个数组,在里面做赋值操作。
  • 打赏
  • 举报
回复
引用 7 楼 Sally_simple 的回复:
[quote=引用 6 楼 u011100122 的回复:] 首先,你是要根据你的输入,读取不同的文件: BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\Administrator\\Desktop\\file1.txt")) 你的这个方法来读取的话,你可以尝试:"C:\\Users\\Administrator\\Desktop\\file"+"i"+".txt");如果你的文件名字确定了是file(i)这样的话,这是可以读取到的。 第二个,你的String数据要以二维数组的方式保存下来,就是一个基本的二维数组声明。如果你有比较特殊的需求,你的需求要明确点。
文件那个可以实现了,就是数组不知道如果处理。 实在是搞不定了,请求帮助。
		System.out.println("the file");
		Scanner scanner = new Scanner(System.in);
		int i = scanner.nextInt();
		
		
		BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\Administrator\\Desktop\\file"+i+".txt"));
	    String s = null;
	    String ss = null;
	    while((s=br.readLine())!= null){
	    	System.out.println(s);

	    }
//	    BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\Administrator\\Desktop\\file"+i+".txt"));
//	    String s = null;
	    while((ss=br.readLine())!= null){
	    	System.out.println(ss);
	    	
	  /*  for(int j = 0; j < s.length(); j ++){
    		String [] arr = s.split("\\s+");
    		System.out.print(arr[j]);*/
    	}
	    }
	    	
文件的内容是 A 1 2 B 2 4 现在有个问题就是,s可以输出文件的内容,但是ss输出的内容是空。这个有点不明白 我想实现的是,第一行的三个元素(A, 1, 2)分别和第二行的三个元素(B, 2, 4)。 也就是 A和B比较是否相等,1 和2 比较, 2 和4 比较。 想了好久都没有想到改怎么实现。 这两个是不同的步骤。先输出文件的内容,然后再比较各个元素。 谢谢了[/quote] ss不输出的原因是br的文件指针已经到达文件的末尾。所以你的ss的值一直未null,所以不会打印。
  • 打赏
  • 举报
回复
哥们 以后问问题的时候把问题描述清楚,这样别人更好的替你解答
  • 打赏
  • 举报
回复
引用 5 楼 Sally_simple 的回复:
[quote=引用 4 楼 yuan514168845 的回复:] 你是想顺序的读出一系列的文件吗、? 就是所读的文件名随着i改变?
是的[/quote]那这个好办啊
kevinlifeng 2014-01-07
  • 打赏
  • 举报
回复
我从头看到尾,也许是了解你的意思了,第一个问题,是不是就是输入不同的数字,那么i/o流去读不同的文件。是吧~~,这个可以帮你的输入的数字保存起来,然后拼成文件路径的,上面有实现了。第二问题,就是读一个文件的时候,也许他有两行记录,你想把这两行记录分别记录下来,然后对比,是吧~~你写的那段代码是有问题的 System.out.println("the file"); Scanner scanner = new Scanner(System.in); int i = scanner.nextInt(); BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\Administrator\\Desktop\\file"+i+".txt")); String s = null; String ss = null; while((s=br.readLine())!= null){ System.out.println(s); }// BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\Administrator\\Desktop\\file"+i+".txt")); // String s = null; while((ss=br.readLine())!= null){ System.out.println(ss); /* for(int j = 0; j < s.length(); j ++){ String [] arr = s.split("\\s+"); System.out.print(arr[j]);*/ } } 问题就在你这两个while循环,因为你的第一个循环都把文本读到了最后,然后才跳出循环的,你第二循环还去读这个流,不过你的流还是br,这个已经都读到了最后行了,所以进不去这个循环的。所以ss依然是null .不过你用数组来存字符,总感觉不妥。因为你不知道你的文件里有多少行,有多少列,不过可以帮你实现 BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("d:\\aaa.txt")))); List<String> str = new ArrayList<String>() ; String[] temp1 = null; String[] temp2 = null; String input = null; int i = 0 ; while((input=br.readLine()) != null){ //把每一行存到你一个大的列表里面 str.add(input); i++; } //下面是你想去那任意来两行两比较行来比较 //现把两行的字符串分别赋值到两个变量中比如第一行第二行比较 //为了兼容性,记得要判断i是不是大于1,不然下面有可能会报溢出错误 if(i>0){ temp1 = str.get(0).split("\\s+"); temp2 = str.get(1).split("\\s+"); //下面就是你想要的实现把~~~ for(int j=0;j<temp1.length;j++){ if(temp1[j].equals(temp2[j])){ System.out.println("第"+j+"列相同"); }else{ System.out.println("第"+j+"列不相同"); } } } 希望对你有帮助~~~
Sally_simple 2014-01-07
  • 打赏
  • 举报
回复
引用 8 楼 oh_Maxy 的回复:
根据输入,选择文件打印,这样行不

    public static void main(String[] args) {
        System.out.println("the file");
        Scanner scanner = new Scanner(System.in);

        // 为-1时,结束文件打印
        int i;
        while (-1 != (i = scanner.nextInt())) {
            printFile(i);
        }
    }

    private static void printFile(int i) {
        BufferedReader br = null;
        try {
            br = new BufferedReader(new InputStreamReader(new FileInputStream((new File(
                    "C:\\Users\\Administrator\\Desktop\\file" + i + ".txt")))));
            String s = null;
            while ((s = br.readLine()) != null) {
                System.out.println(s);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (null != br) {
                    br.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
这个只能打印出文件的内容~不能实现数组啊~
oh_Maxy 2014-01-07
  • 打赏
  • 举报
回复
根据输入,选择文件打印,这样行不

    public static void main(String[] args) {
        System.out.println("the file");
        Scanner scanner = new Scanner(System.in);

        // 为-1时,结束文件打印
        int i;
        while (-1 != (i = scanner.nextInt())) {
            printFile(i);
        }
    }

    private static void printFile(int i) {
        BufferedReader br = null;
        try {
            br = new BufferedReader(new InputStreamReader(new FileInputStream((new File(
                    "C:\\Users\\Administrator\\Desktop\\file" + i + ".txt")))));
            String s = null;
            while ((s = br.readLine()) != null) {
                System.out.println(s);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (null != br) {
                    br.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
Sally_simple 2014-01-07
  • 打赏
  • 举报
回复
引用 6 楼 u011100122 的回复:
首先,你是要根据你的输入,读取不同的文件: BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\Administrator\\Desktop\\file1.txt")) 你的这个方法来读取的话,你可以尝试:"C:\\Users\\Administrator\\Desktop\\file"+"i"+".txt");如果你的文件名字确定了是file(i)这样的话,这是可以读取到的。 第二个,你的String数据要以二维数组的方式保存下来,就是一个基本的二维数组声明。如果你有比较特殊的需求,你的需求要明确点。
文件那个可以实现了,就是数组不知道如果处理。 实在是搞不定了,请求帮助。
		System.out.println("the file");
		Scanner scanner = new Scanner(System.in);
		int i = scanner.nextInt();
		
		
		BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\Administrator\\Desktop\\file"+i+".txt"));
	    String s = null;
	    String ss = null;
	    while((s=br.readLine())!= null){
	    	System.out.println(s);

	    }
//	    BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\Administrator\\Desktop\\file"+i+".txt"));
//	    String s = null;
	    while((ss=br.readLine())!= null){
	    	System.out.println(ss);
	    	
	  /*  for(int j = 0; j < s.length(); j ++){
    		String [] arr = s.split("\\s+");
    		System.out.print(arr[j]);*/
    	}
	    }
	    	
文件的内容是 A 1 2 B 2 4 现在有个问题就是,s可以输出文件的内容,但是ss输出的内容是空。这个有点不明白 我想实现的是,第一行的三个元素(A, 1, 2)分别和第二行的三个元素(B, 2, 4)。 也就是 A和B比较是否相等,1 和2 比较, 2 和4 比较。 想了好久都没有想到改怎么实现。 这两个是不同的步骤。先输出文件的内容,然后再比较各个元素。 谢谢了
Sally_simple 2014-01-06
  • 打赏
  • 举报
回复
引用 4 楼 yuan514168845 的回复:
你是想顺序的读出一系列的文件吗、? 就是所读的文件名随着i改变?
是的
  • 打赏
  • 举报
回复
你是想顺序的读出一系列的文件吗、? 就是所读的文件名随着i改变?
Sally_simple 2014-01-06
  • 打赏
  • 举报
回复
引用 1 楼 oh_Maxy 的回复:
操作的是file2还是file1,记录到一个变量里,然后如果输入的值与记录的不一致,就重新new呗。
	System.out.println("the file");
		Scanner scanner = new Scanner(System.in);
		int i = scanner.nextInt();
		
		
		BufferedReader br = new BufferedReader(new FileReader("C:\\Users\\Administrator\\Desktop\\file1.txt"));
	    String s = null;
	    while((s=br.readLine())!= null){
//	    	String [] arr = s.split("\\s+");
	    	System.out.println(s);
我想实现 输入的i和FileReader的文件一致, 一个i对应一个fileReader的file,你说的我还是有点不太清楚。 还有就是如何把String转变成一个二维数组。想把输入的文件的每一行和每一列放在一个二维数组里,方便以后的条用。 比如 A 1 2 B 3 4 想实现 arr[0][0] = A, arr[1][0] = B 这个又该如何实现呢,谢谢啦~
Test_LD 2014-01-06
  • 打赏
  • 举报
回复
<key,value>,可以根据文件名的特点来找, 或是可以专门搞个文件作为存放值与文件的映射关系
oh_Maxy 2014-01-06
  • 打赏
  • 举报
回复
操作的是file2还是file1,记录到一个变量里,然后如果输入的值与记录的不一致,就重新new呗。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧