java怎么从一个文件中随机读取一句话

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java怎么从一个文件中随机读取一句话相关的知识,希望对你有一定的参考价值。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;

/**
*
* @author sd96800
*
*/
public class TestFile

public static void main(String []args) throws Exception

//获取控制台输入流
Scanner systemIn = new Scanner(System.in);
//是否关闭该程序
boolean isClose = true;
//伪随机生成数字
Random rd = new Random();

//进入程序 当在控制台输入random 随机选取一行 输入数字时候 选择数字对应的行 输入exit 退出程序
System.out.println("请输入指定文件名以及路径:");

File file = null;

while(isClose)
file = new File(systemIn.next());
if(file.isFile())
System.out.println("输入正确!输入数字选择当前文本文档的行,输入random随机选择,输入all显示所有行,输入next 退出!");
isClose = false;
else
System.out.println("您所输入的文件名不正确,请重新输入! :");



//创建该文件的输入流
BufferedReader in = new BufferedReader(new FileReader(file));

//用getReaderStrArray方法返回从当前输入流中读取出来的字符串
List<String> fileStrArray = getReaderStrArray(in);

while(!isClose)
String str = systemIn.next();
if("exit".equals(str))
System.out.println("关闭Close");
isClose = true;
else if("random".equals(str))
System.out.println("随机Random:" + fileStrArray.get(rd.nextInt(fileStrArray.size() - 1)));
else if("all".equals(str))
System.out.println("全部All:");
for(int i = 0 ; i < fileStrArray.size() ; i ++)
System.out.println(fileStrArray.get(i));

else
Integer arrayNum = Integer.parseInt(str);
if(arrayNum > 0)
System.out.println("选择Select:" + fileStrArray.get(arrayNum - 1));
else
System.out.println("您输入的数要大于0!error");






//把输入流转换成String类型的容器
public static List<String> getReaderStrArray(BufferedReader br) throws IOException
List<String> strArray = new ArrayList<String>();
while(br.ready())
strArray.add(br.readLine());

return strArray;




输入流里面只能一行一行的读 没有随机这种方法 我看API上没有
参考技术A 确切来说,你可以用流把文件读出来,然后按你的想法切割,切下来的部分都扔一个Set里面。取出的时候肯定是随机的。 参考技术B public String readFile(String filePath, int lineNum)
StringBuffer sb = null;
try
File file = new File(filePath);
if (file.exists())
BufferedReader br = new BufferedReader(new FileReader(file));
String temp = null;
sb = new StringBuffer();
int sum = 1;
temp = br.readLine();
if (lineNum == 1)
return temp;


while (temp != null)
sum++;
sb.append(temp + "\r\n");
temp = br.readLine();

if (sum == lineNum)
return temp;




br.close();

catch (FileNotFoundException e)
e.printStackTrace();
catch (IOException e)
e.printStackTrace();

return sb.toString();


调这个方法 第一个参数是文件路径,第二个参数是读出第几行,这个数字可以rand!!

Java I/O---RandomAccessFile类(随机访问文件的读取和写入)

1.JDK API中RandomAccessFile类的描述

技术分享图片

 

       此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组的光标或索引,称为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机访问文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。该文件指针(实现数组随机读写)可以通过 getFilePointer 方法读取,并通过 seek 方法设置。

      通常,如果此类中的所有读取例程在读取所需数量的字节之前已到达文件末尾,则抛出 EOFException(是一种 IOException)。如果由于某些原因无法读取任何字节,而不是在读取所需数量的字节之前已到达文件末尾,则抛出 IOException,而不是 EOFException。需要特别指出的是,如果流已被关闭,则可能抛出 IOException。

技术分享图片

技术分享图片

技术分享图片

2.RandomAccessFile演示

  1 public class RandomAccessFileDemo {
  2 
  3 	/**
  4 	 * @代码来自传智播客
  5 	 * @param args
  6 	 * @throws IOException
  7 	 */
  8 	public static void main(String[] args) throws IOException {
  9 
 10 
 11 		/*
 12 		 * RandomAccessFile:
 13 		 * 特点:
 14 		 * 1,只能操作文件。
 15 		 * 2,既能读,又能写。
 16 		 * 3,维护了一个byte数组。内部定义了字节流的读取和写入。
 17 		 * 4,通过对指针的操作可以实现对文件的任意位置的读取和写入。
 18 		 */
 19 
 20 
 21 //		writeFile();
 22 		readFile();
 23 	}
 24 
 25 	public static void readFile() throws IOException {
 26 
 27 		RandomAccessFile raf = new RandomAccessFile("tempfile\\\\random.txt", "r");
 28 
 29 		//随机读取,只要通过设置指针的位置即可。
 30 		raf.seek(8*1);
 31 
 32 		byte[] buf = new byte[4];
 33 		raf.read(buf);
 34 		String name = new String(buf);
 35 
 36 		int age = raf.readInt();
 37 
 38 		System.out.println(name+":"+age);
 39 
 40 		raf.close();
 41 
 42 
 43 
 44 	}
 45 
 46 	public static void writeFile() throws IOException {
 47 
 48 		//1,创建一个随机访问文件的对象。文件不存在,则创建,存在,则不创建不覆盖。
 49 		RandomAccessFile raf = new RandomAccessFile("tempfile\\\\random.txt", "rw");
 50 
 51 		//2,写入姓名和年龄。
 52 //		raf.write("张三".getBytes());
 53 //		raf.writeInt(97);//保证整数的字节原样性。
 54 //		raf.write("李四".getBytes());
 55 //		raf.writeInt(99);//保证整数的字节原样性。
 56 
 57 		//3,随机写入。
 58 		raf.seek(8);//设置指针的位置。
 59 		raf.write("王武".getBytes());
 60 		raf.writeInt(100);
 61 		System.out.println(raf.getFilePointer());
 62 
 63 		raf.close();
 64 
 65 
 66 	}
 67 
 68 }

2017-12-31 内容来自API和传智播客

  

以上是关于java怎么从一个文件中随机读取一句话的主要内容,如果未能解决你的问题,请参考以下文章

java 怎么读取web jar中的某个配置文件

java 中inputstream 和outputstream 怎么进行文件的读取写入的??

单例模式

C#如何读取config配置文件数据?

从文件中读取字符-多次调用read characters from file multiple calls

某哥一句话点醒我什么是网络编程------不过就是读写文件而已(大道至简)