Java 如何将此主方法更改为按顺序读取文件

Java 如何将此主方法更改为按顺序读取文件,java,file,jakarta-ee,file-io,Java,File,Jakarta Ee,File Io,如何按顺序读取文件 public static void main(String[] args){ String fichier ="E:\\fichiers\\test.txt"; int tab[] = {2, 2, 20, 8, 20, 8, 4, 3, 7, 3, 3, 3, 18, 139}; String tabS[] = new String[14]; for(int i=0; i<tab.length; i++){ c

如何按顺序读取文件

public static void main(String[] args){
    String fichier ="E:\\fichiers\\test.txt";

    int tab[] = {2, 2, 20, 8, 20, 8, 4, 3, 7, 3, 3, 3, 18, 139};
    String tabS[] = new String[14];


    for(int i=0; i<tab.length; i++){

        char cbuf[] = new char[tab[i]];

        try {

            InputStream       ips  = new FileInputStream(fichier); 
            InputStreamReader ipsr = new InputStreamReader(ips);
            BufferedReader    br   = new BufferedReader(ipsr);

            br.read(cbuf, 0, tab[i]);

            tabS[i] = new String(cbuf);
            System.out.println(tabS[i]);

        } catch (Exception e){
            System.out.println(e.toString());
        }
    }
}
当我运行readMe方法时,我得到以下结果:

这里的问题是,每次他开始读取文件时,它都会开始定位0


有什么帮助吗?

在我看来,在创建流之后,您只需要在try/catch中移动for循环

public static void main(String[] args){
    String fichier ="E:\\fichiers\\test.txt";

    int tab[] = {2, 2, 20, 8, 20, 8, 4, 3, 7, 3, 3, 3, 18, 139};
    String tabS[] = new String[14];

    try {

        InputStream       ips  = new FileInputStream(fichier); 
        InputStreamReader ipsr = new InputStreamReader(ips);
        BufferedReader    br   = new BufferedReader(ipsr);

        for(int i=0; i<tab.length; i++){

            char cbuf[] = new char[tab[i]];

            br.read(cbuf, 0, tab[i]);

            tabS[i] = new String(cbuf);
            System.out.println(tabS[i]);
        }

    } catch (Exception e){
        System.out.println(e.toString());
    }
}
publicstaticvoidmain(字符串[]args){
字符串fichier=“E:\\fichiers\\test.txt”;
int tab[]={2,2,20,8,20,8,4,3,7,3,3,18,139};
字符串选项卡[]=新字符串[14];
试一试{
InputStream ips=新文件InputStream(fichier);
InputStreamReader ipsr=新的InputStreamReader(ips);
BufferedReader br=新的BufferedReader(ipsr);

for(int i=0;i在我看来,在创建流之后,您只需要在try/catch中移动for循环

public static void main(String[] args){
    String fichier ="E:\\fichiers\\test.txt";

    int tab[] = {2, 2, 20, 8, 20, 8, 4, 3, 7, 3, 3, 3, 18, 139};
    String tabS[] = new String[14];

    try {

        InputStream       ips  = new FileInputStream(fichier); 
        InputStreamReader ipsr = new InputStreamReader(ips);
        BufferedReader    br   = new BufferedReader(ipsr);

        for(int i=0; i<tab.length; i++){

            char cbuf[] = new char[tab[i]];

            br.read(cbuf, 0, tab[i]);

            tabS[i] = new String(cbuf);
            System.out.println(tabS[i]);
        }

    } catch (Exception e){
        System.out.println(e.toString());
    }
}
publicstaticvoidmain(字符串[]args){
字符串fichier=“E:\\fichiers\\test.txt”;
int tab[]={2,2,20,8,20,8,4,3,7,3,3,18,139};
字符串选项卡[]=新字符串[14];
试一试{
InputStream ips=新文件InputStream(fichier);
InputStreamReader ipsr=新的InputStreamReader(ips);
BufferedReader br=新的BufferedReader(ipsr);
对于(int i=0;i看你有:

int tab[] = {2, 2, 20, 8, 20, 8, 4, 3, 7, 3, 3, 3, 18, 139};
        InputStream       ips  = new FileInputStream(fichier); 
        InputStreamReader ipsr = new InputStreamReader(ips);
        BufferedReader    br   = new BufferedReader(ipsr);
您的输出是:

BO                        // length 2
BO                        // length 2
BOUUUUUUUUUUUUUUUUUU      // length 20
BOUUUUUU                  // length 8
BOUUUUUUUUUUUUUUUUUU
BOUUUUUU
BOUU
BOU
BOUUUUU
BOU
BOU
BOU
BOUUUUUUUUUUUUUUUU
BOUUUUUUUUUUUUUUUUUUUUUU!
考虑到:

        br.read(cbuf, 0, tab[i]);
        tabS[i] = new String(cbuf);
        System.out.println(tabS[i]);
它在每个迭代中从位置0开始,因为您有:

int tab[] = {2, 2, 20, 8, 20, 8, 4, 3, 7, 3, 3, 3, 18, 139};
        InputStream       ips  = new FileInputStream(fichier); 
        InputStreamReader ipsr = new InputStreamReader(ips);
        BufferedReader    br   = new BufferedReader(ipsr);
for
循环中。只需将其从循环中删除即可纠正这种情况:

try 
{
        InputStream       ips  = new FileInputStream(fichier); 
        InputStreamReader ipsr = new InputStreamReader(ips);
        BufferedReader    br   = new BufferedReader(ipsr);

        for(int i=0; i<tab.length; i++)
        {
            char cbuf[] = new char[tab[i]];
            br.read(cbuf, 0, tab[i]);
            tabS[i] = new String(cbuf);

            System.out.println(tabS[i]);
        } 

}
catch (Exception e)
{
    System.out.println(e.toString());
}
试试看
{
InputStream ips=新文件InputStream(fichier);
InputStreamReader ipsr=新的InputStreamReader(ips);
BufferedReader br=新的BufferedReader(ipsr);
对于(int i=0;i看你有:

int tab[] = {2, 2, 20, 8, 20, 8, 4, 3, 7, 3, 3, 3, 18, 139};
        InputStream       ips  = new FileInputStream(fichier); 
        InputStreamReader ipsr = new InputStreamReader(ips);
        BufferedReader    br   = new BufferedReader(ipsr);
您的输出是:

BO                        // length 2
BO                        // length 2
BOUUUUUUUUUUUUUUUUUU      // length 20
BOUUUUUU                  // length 8
BOUUUUUUUUUUUUUUUUUU
BOUUUUUU
BOUU
BOU
BOUUUUU
BOU
BOU
BOU
BOUUUUUUUUUUUUUUUU
BOUUUUUUUUUUUUUUUUUUUUUU!
考虑到:

        br.read(cbuf, 0, tab[i]);
        tabS[i] = new String(cbuf);
        System.out.println(tabS[i]);
它在每个迭代中从位置0开始,因为您有:

int tab[] = {2, 2, 20, 8, 20, 8, 4, 3, 7, 3, 3, 3, 18, 139};
        InputStream       ips  = new FileInputStream(fichier); 
        InputStreamReader ipsr = new InputStreamReader(ips);
        BufferedReader    br   = new BufferedReader(ipsr);
for
循环中。只需将其从循环中删除即可纠正这种情况:

try 
{
        InputStream       ips  = new FileInputStream(fichier); 
        InputStreamReader ipsr = new InputStreamReader(ips);
        BufferedReader    br   = new BufferedReader(ipsr);

        for(int i=0; i<tab.length; i++)
        {
            char cbuf[] = new char[tab[i]];
            br.read(cbuf, 0, tab[i]);
            tabS[i] = new String(cbuf);

            System.out.println(tabS[i]);
        } 

}
catch (Exception e)
{
    System.out.println(e.toString());
}
试试看
{
InputStream ips=新文件InputStream(fichier);
InputStreamReader ipsr=新的InputStreamReader(ips);
BufferedReader br=新的BufferedReader(ipsr);

对于(int i=0;iIt完全不清楚您试图在这里实现什么…但是此代码以多种方式被破坏。看起来您的程序正在完全按照您的要求执行:每次通过循环时,打开文件(从文件开头开始),读取一定数量的字符,然后打印出来。您希望实现什么?完全不清楚您在这里试图实现什么…但此代码以多种方式被破坏。看起来您的程序正按照您的要求执行:每次通过循环,打开文件(从文件开头开始),读一些字符,然后打印出来。你希望达到什么目的?