如何阅读文本文件的某些块。 Java的

时间:2013-10-28 11:44:46

标签: java file file-io

所以我有一个文本文件(file.txt),里面有一个长号。基本上,这个数字与PI相似。我需要从文件中一次读取10位数字。例如:

文件中的数字:

3.14159265358979323846264338327950288419716939937510582097494459230781640628

我需要取其前十位数字:3.141592653并将其传递给一个函数 返回truefalse。如果我收到true,则该函数停止并返回10 数字。如果数字为假,那么我接下来的10位数1415926535,然后传递它 进入功能。

我如何一次读取10位数的文件。

6 个答案:

答案 0 :(得分:0)

你可以将这一行变为String变量并使用'。'对其进行子串。 然后只得到小数部分并将其大小为10并将其存储到数组中。

如果您发布代码,我们可以提供更多帮助。

要分块,您可以使用substring

答案 1 :(得分:0)

好的,这是一个草稿,将此逻辑构建到您现有的代码中,编辑您的问题,我们可以帮助您完成它。

使用的关键方法是FileReaders read()获取单个char的方法(如果没有,则返回-1)和skip()忽略一定量的chars(已处理)

(对不起,有点匆忙制作不好)

import java.io.File;
import java.io.FileReader;
import java.io.IOException;


public class SimpleReader {

    File theSourceFile = new File("D:\\<yourPath>\\input.txt");
    int nrOfCharsToRead = 10;
    int nrOfCharsProcessed = 0;

    public static void main(String[] args) {

        new SimpleReader().process();       
    }

    public void process(){

        System.out.println(getNext(nrOfCharsToRead));
        System.out.println(getNext(nrOfCharsToRead));
        System.out.println(getNext(nrOfCharsToRead));
        System.out.println(getNext(nrOfCharsToRead));
        System.out.println(getNext(nrOfCharsToRead));
        System.out.println(getNext(nrOfCharsToRead));
        System.out.println(getNext(nrOfCharsToRead));
        System.out.println(getNext(nrOfCharsToRead));
        System.out.println(getNext(nrOfCharsToRead));
        System.out.println(getNext(nrOfCharsToRead));

    }

    private String getNext(int nrOfCharsToRead){

        try {

               FileReader reader = new FileReader(theSourceFile);
               StringBuffer b = new StringBuffer();

               reader.skip(nrOfCharsProcessed);

               char c;
               int counter = 0;
               StringBuffer sb = new StringBuffer();

               while((c = (char) reader.read()) != -1 && counter < nrOfCharsToRead){
                   sb.append(c);
                   nrOfCharsProcessed++;
                   counter++;
               }

               reader.close();

               return sb.toString();
           } catch (IOException e) {
               e.printStackTrace();
           } 

        return "";

    }

}   

答案 2 :(得分:0)

有没有这样的东西,希望它有用,我硬编码的值假设你从文本文件中获取值

package javaapplication14;


public class JavaApplication14 {

    static int strt = 0;
    static int end = 10;


    public static void main(String[] args) {

        String num = "3.14159265358979323846264338327950288419716939937510582097494459230781640628";


        boolean val = false;

        while (val == false) {
            val = check(num.substring(strt, end));
            strt = end;
            end = end + 10;
        }
    }

    private static boolean check(String substring) {
        String num = substring;
        //just for checking (the first ten digits of the string)
        String chk = "3.14159265";
        System.out.println("substr " + substring);
        if (chk.equals(num)) {
            System.out.println("equal");
            return true;
        } else {
            return false;
        }
    }
}

答案 3 :(得分:0)

以下是一些可以帮助您入门的通用代码:

String text;
int index = 0;

String subText = text.substring(index, index+10);
while (method(subText) && ((index + 10) < text.length())) {
    subText = text.substring(index, index + 10);
    index += 10;
}

答案 4 :(得分:0)

使用Apache Commons IO:

import java.io.File;
import java.util.Arrays;

import org.apache.commons.io.FileUtils;

...
String fileContent = FileUtils.readFileToString(new File("pi.txt"));
String tenCharacters = Arrays.toString(fileContent.split("(?<=\\G..........)"));
doStuff(tenCharacters);
...

答案 5 :(得分:-1)

String text;
text = "3.14159265358979323846264338327950288419716939937510582097494459230781640628";
int index = 0; 
while (index<text.length()) {
    String string = text.substring(index, Math.min(index+10,text.length()));

    //function to process 10 digits. if true break
    if(processDigits(string))
         break;

    index+=10;
}