Почему он до сих пор хранит мой предыдущий поток - PullRequest
0 голосов
/ 06 сентября 2011

Я прохожу inputStream и проверяю, есть ли у первого ввода файла правильные данные, но проблема в том, что если я не вызываю мой метод для чтения в файле снова, но он все еще содержит информацию из предыдущего сканирования файла. Есть ли в любом случае, я могу сказать это просто сбросить то, что было в inputStream и начать все сначала?

 public static  void readinfile(ArrayList<ArrayList> table,
        int numberOfColumns,  
        ArrayList<String> header, ArrayList<ArrayList<String>> original,
        ArrayList<String> sntypes, ArrayList<Integer> displaySize, ArrayList<String> writeOut, Scanner inputStream) 
{

    inputStream = null;
     table.clear(); 
    sntypes.clear();
    displaySize.clear();
    header.clear();
    numberOfColumns = 0;
    original.clear();
    Scanner keyboard = new Scanner(System.in);
    String fileName = keyboard.nextLine();
    System.out.println(inputStream);
    boolean done = false;
    while(!done)
    {
        try 
        {
            inputStream = new Scanner(new FileInputStream(fileName));
            done = true;

            header.clear();
        }
        catch(FileNotFoundException E)
        {   System.out.println("Error in opening file ");
        System.out.print("enter data file: ");
            fileName = keyboard.nextLine();

        }
    }

    // file is now open and input scanner attached
    boolean done1 = false;
    if ( inputStream.hasNextLine() ) {

        String csvLine = inputStream.nextLine();

        Scanner lineparse = new Scanner(csvLine);
        lineparse.useDelimiter(",");
        ArrayList<String> rowOne = new ArrayList<String>();

        while (lineparse.hasNextLine()) {
            String temp = lineparse.next();
            String originaltemp = temp; 
            writeOut.add(temp);
            temp = temp + "(" + (++numberOfColumns) + ")";
            displaySize.add(temp.length());


            if (temp.trim().substring(0, 2).equalsIgnoreCase("S ")
                    || temp.trim().substring(0, 2).equalsIgnoreCase("N ")) {
                rowOne.add(originaltemp);
                header.add(temp.substring(2));
                sntypes.add(temp.toUpperCase()
                        .substring(0,2).trim());

            } else {

                System.out
                .println("Invalid file please enter a new file: ");
                readinfile(table, numberOfColumns, header,
                    original, sntypes,displaySize, writeOut, inputStream );

            }

        }
        // add table here it gives problem later on...
        original.add(rowOne);

    }

    while (inputStream.hasNextLine()) 
    {
        String csvLine = inputStream.nextLine();

        Scanner lineparse = new Scanner(csvLine);
        lineparse.useDelimiter(",");

        ArrayList row = new ArrayList();
        int j = 0;
        while (lineparse.hasNext()) {
            String temp = lineparse.next().trim();

            int sizeOfrow = temp.trim().length();
            if (sizeOfrow > displaySize.get(j))
            {
                displaySize.set(j, sizeOfrow);
            }
            if (j < numberOfColumns && sntypes.get(j).equalsIgnoreCase("N")) {
            try 
                {
                    if(temp.equalsIgnoreCase(""))
                    {
                        row.add(new Double(0.0));   
                    }
                    else
                    {   
                        row.add(new Double(temp.trim()));
                    }
                }

            catch (NumberFormatException E)
                {
                    System.out.println("Opps there is a mistake I was expecting a number and I found: "+temp);
                    System.out.println("This row will be ignored");
                    break;

                }

            }
            else 
            {
                if(temp.equalsIgnoreCase(""))
                {
                    row.add((" "));
                }else
                {
                    row.add(temp);
                }

            }
            j++;
        }

        if (row.size() == numberOfColumns) 
        {
            table.add(row);
        }
    }// close for while


    inputStream.close();
}

1 Ответ

2 голосов
/ 06 сентября 2011

Вы вызываете метод рекурсивно - что на самом деле не идеально, но мы пока оставим это (метод также на путь длиннее, чем это полезно для удобства обслуживания), но проблема в том, чточто после вы сделали рекурсивный вызов, и он завершен, вы все еще продолжаете работу с оригинальным сканером.Я подозреваю, что если вы просто добавите оператор return; после рекурсивного вызова, все будет хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...