简体   繁体   English

使用Java从文本文件中读取数据

[英]Read data from a text file using Java

I need to read a text file line by line using Java. 我需要使用Java逐行读取文本文件。 I use available() method of FileInputStream to check and loop over the file. 我使用FileInputStream available()方法来检查和循环文件。 But while reading, the loop terminates after the line before the last one. 但是在读取时,循环在最后一行之前的行之后终止。 ie , if the file has 10 lines, the loop reads only the first 9 lines. ,如果文件有10行,则循环只读取前9行。 Snippet used : 使用的片段:

while(fis.available() > 0)
{
    char c = (char)fis.read();
    .....
    .....
}

You should not use available() . 你不应该使用available() It gives no guarantees what so ever. 它无法保证什么。 From the API docs of available() : 来自available()API文档

Returns an estimate of the number of bytes that can be read (or skipped over) from this input stream without blocking by the next invocation of a method for this input stream. 返回可以从此输入流中读取(或跳过)的字节数的估计值 ,而不会被下一次调用此输入流的方法阻塞。

You would probably want to use something like 你可能想要使用类似的东西

try {
    BufferedReader in = new BufferedReader(new FileReader("infilename"));
    String str;
    while ((str = in.readLine()) != null)
        process(str);
    in.close();
} catch (IOException e) {
}

(taken from http://www.exampledepot.com/egs/java.io/ReadLinesFromFile.html ) (摘自http://www.exampledepot.com/egs/java.io/ReadLinesFromFile.html

How about using Scanner? 使用Scanner怎么样? I think using Scanner is easier 我认为使用Scanner更容易

     private static void readFile(String fileName) {
       try {
         File file = new File(fileName);
         Scanner scanner = new Scanner(file);
         while (scanner.hasNextLine()) {
           System.out.println(scanner.nextLine());
         }
         scanner.close();
       } catch (FileNotFoundException e) {
         e.printStackTrace();
       }
     }

Read more about Java IO here 在此处阅读有关Java IO的更多信息

If you want to read line-by-line, use a BufferedReader . 如果要逐行读取,请使用BufferedReader It has a readLine() method which returns the line as a String, or null if the end of the file has been reached. 它有一个readLine()方法,它将该行作为String返回,如果已到达文件的末尾,则返回null。 So you can do something like: 所以你可以这样做:

BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
String line;
while ((line = reader.readLine()) != null) {
 // Do something with line
}

(Note that this code doesn't handle exceptions or close the stream, etc) (请注意,此代码不处理异常或关闭流等)

String file = "/path/to/your/file.txt";

try {

    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
    String line;
    // Uncomment the line below if you want to skip the fist line (e.g if headers)
    // line = br.readLine();

    while ((line = br.readLine()) != null) {

        // do something with line

    }
    br.close();

} catch (IOException e) {
    System.out.println("ERROR: unable to read file " + file);
    e.printStackTrace();   
}

You can try FileUtils from org.apache.commons.io.FileUtils, try downloading jar from here 您可以从org.apache.commons.io.FileUtils尝试FileUtils, 尝试从这里下载jar

and you can use the following method: FileUtils.readFileToString("yourFileName"); 并且您可以使用以下方法:FileUtils.readFileToString(“yourFileName”);

Hope it helps you.. 希望它可以帮助你..

你的代码跳过最后一行的原因是因为你把fis.available() > 0而不是fis.available() >= 0

In Java 8 you could easily turn your text file into a List of Strings with streams by using Files.lines and collect : Java 8中,您可以使用Files.lines轻松地将文本文件转换为带有流的字符串列表并collect

private List<String> loadFile() {
    URI uri = null;
    try {
        uri = ClassLoader.getSystemResource("example.txt").toURI();
    } catch (URISyntaxException e) {
        LOGGER.error("Failed to load file.", e);
    }
    List<String> list = null;
    try (Stream<String> lines = Files.lines(Paths.get(uri))) {
        list = lines.collect(Collectors.toList());
    } catch (IOException e) {
        LOGGER.error("Failed to load file.", e);
    }
    return list;
}
//The way that I read integer numbers from a file is...

import java.util.*;
import java.io.*;

public class Practice
{
    public static void main(String [] args) throws IOException
    {
        Scanner input = new Scanner(new File("cards.txt"));

        int times = input.nextInt();

        for(int i = 0; i < times; i++)
        {
            int numbersFromFile = input.nextInt();
            System.out.println(numbersFromFile);
        }




    }
}

user scanner it should work 用户扫描仪它应该工作

         Scanner scanner = new Scanner(file);
         while (scanner.hasNextLine()) {
           System.out.println(scanner.nextLine());
         }
         scanner.close(); 
public class ReadFileUsingFileInputStream {

/**
* @param args
*/
static int ch;

public static void main(String[] args) {
    File file = new File("C://text.txt");
    StringBuffer stringBuffer = new StringBuffer("");
    try {
        FileInputStream fileInputStream = new FileInputStream(file);
        try {
            while((ch = fileInputStream.read())!= -1){
                stringBuffer.append((char)ch);  
            }
        }
        catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    System.out.println("File contents :");
    System.out.println(stringBuffer);
    }
}

Try this just a little search in Google 试试这只是在谷歌搜索一下

import java.io.*;
class FileRead 
{
   public static void main(String args[])
  {
      try{
    // Open the file that is the first 
    // command line parameter
    FileInputStream fstream = new FileInputStream("textfile.txt");
    // Get the object of DataInputStream
    DataInputStream in = new DataInputStream(fstream);
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
    String strLine;
    //Read File Line By Line
    while ((strLine = br.readLine()) != null)   {
      // Print the content on the console
      System.out.println (strLine);
    }
    //Close the input stream
    in.close();
    }catch (Exception e){//Catch exception if any
      System.err.println("Error: " + e.getMessage());
    }
  }
}

Try using java.io.BufferedReader like this. 尝试使用像这样的java.io.BufferedReader

java.io.BufferedReader br = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(fileName)));
String line = null;
while ((line = br.readLine()) != null){
//Process the line
}
br.close();

Yes, buffering should be used for better performance. 是的,应该使用缓冲来获得更好的性能。 Use BufferedReader OR byte[] to store your temp data. 使用BufferedReader OR byte []存储临时数据。

thanks. 谢谢。

public class FilesStrings {

public static void main(String[] args) throws FileNotFoundException, IOException {
    FileInputStream fis = new FileInputStream("input.txt");
    InputStreamReader input = new InputStreamReader(fis);
    BufferedReader br = new BufferedReader(input);
    String data;
    String result = new String();

    while ((data = br.readLine()) != null) {
        result = result.concat(data + " ");
    }

    System.out.println(result);
    File file = new File("Path");

    FileReader reader = new FileReader(file);  

    while((ch=reader.read())!=-1)
    {
        System.out.print((char)ch);
    }

This worked for me 这对我有用

Simple code for reading file in JAVA: 在JAVA中读取文件的简单代码:

import java.io.*;

class ReadData
{
    public static void main(String args[])
    {
        FileReader fr = new FileReader(new File("<put your file path here>"));
        while(true)
        {
            int n=fr.read();
            if(n>-1)
            {
                char ch=(char)fr.read();
                System.out.print(ch);
            }
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM