Java hasMoreTokens功能强制关闭应用程序

Java hasMoreTokens功能强制关闭应用程序,java,android,android-layout,Java,Android,Android Layout,我想读取带有分隔符“!”的csv文件。但当我在android应用程序中运行以下代码时,整个应用程序就挂起了。请帮我解决这个问题 在记事本中打开时,输入文件如下所示: ///////////////////////////////////////////////////////// Line Number"!Shift!"QC Operator"!"Line Operator"!"Printing Operator"!"Product Group"!"Product Series"!Prod

我想读取带有分隔符“!”的csv文件。但当我在android应用程序中运行以下代码时,整个应用程序就挂起了。请帮我解决这个问题

在记事本中打开时,输入文件如下所示:

/////////////////////////////////////////////////////////


Line Number"!Shift!"QC Operator"!"Line Operator"!"Printing Operator"!"Product 
Group"!"Product Series"!Product!" Type of Defect"!"PCBType"!CORRECTIVE ACTION (CA)
1!DAY!Deepak!Chetan!Arun!TIMER!MM30XX!55Q!NO Solder!POWER!REWORK
2!NIGHT!Kajal!Kajal!Ashish!TEMP!MM10XX!55Q!Less solder!LOGIC!Replacement
3!!Kavita!Mahesh G!B.C!COUNTER!TC!EM306A!Dry solder!DISPLAY!NA
4!!Madhuri!Mahesh.P!Pabitra!PLC!PID !EM368 !IC PIN SOLDER SHORT!CARD!
5!!Namita!Namita!Sachin!METER!XT!EM368-C!Tombs toning!!
!!Sneha!Naveen!Sayali!DPM!800!MF16 !One side open !!

///////////////////////////////////////////////////////
读取文件的代码:

    public void ReadConfigFile() throws IOException 
{      
    File myFile = new File(Environment.getExternalStorageDirectory() + File.separator + "QCVerification"+ File.separator+"List of Entries.csv");
    FileInputStream fIn = new FileInputStream(myFile);
    BufferedReader myReader = new BufferedReader(
            new InputStreamReader(fIn));
    String aDataRow = "";
    ArrayList<String> FileWholeData = new ArrayList<String>();
    FileWholeData.removeAll(null);
    while ((aDataRow = myReader.readLine()) != null) 
    {
        FileWholeData.add(aDataRow);
    }
    MyQcDataStructure = new QCDataStructure();
    for(Integer __index = 0;__index <FileWholeData.size();__index++)
    {   
        String TempString = "";
        TempString = FileWholeData.get(__index);
        StringTokenizer tokenizer = new StringTokenizer(TempString,"!");   
        int columnIndex = 0;   
        while (tokenizer.hasMoreTokens()) 
        {                  
            switch (columnIndex) 
            {     
            case 0:   
                MyQcDataStructure.QCLineNo.add(tokenizer.nextToken());
                break;
            case 1:
                    MyQcDataStructure.QCShift.add(tokenizer.nextToken());
                    break;
            case 2:
                    MyQcDataStructure.QCQCOPer.add(tokenizer.nextToken());
                    break;
            case 3:
                    MyQcDataStructure.QCLineOper.add(tokenizer.nextToken());
                    break;
            case 4:
                    MyQcDataStructure.QCPrintingOper.add(tokenizer.nextToken());
                    break;
            case 5:
                    MyQcDataStructure.QCProductGorup.add(tokenizer.nextToken());
                    break;
            case 6:
                    MyQcDataStructure.QCProductSeries.add(tokenizer.nextToken());
                    break;
            case 7:
                    MyQcDataStructure.QCProduct.add(tokenizer.nextToken());
                    break;
            case 8:
                    MyQcDataStructure.QCPDefect.add(tokenizer.nextToken());
                    break;
            case 9:
                    MyQcDataStructure.QCPCBType.add(tokenizer.nextToken());
                    break;
            case 10:
                    MyQcDataStructure.QCCA.add(tokenizer.nextToken());
                    break;
            }                      
            columnIndex++; 
        }
        break;
    }
    String aBuffer;
    aBuffer = "";
    for(int __secondIndex = 0;__secondIndex < MyQcDataStructure.QCLineNo.size();__secondIndex++)
    {
        aBuffer = aBuffer + MyQcDataStructure.QCLineNo.get(__secondIndex);
        aBuffer = aBuffer + "$";
        aBuffer = aBuffer + MyQcDataStructure.QCShift.get(__secondIndex);
        aBuffer = aBuffer + "$";
        aBuffer = aBuffer + MyQcDataStructure.QCQCOPer.get(__secondIndex);
        aBuffer = aBuffer + "$";
        aBuffer = aBuffer + MyQcDataStructure.QCLineOper.get(__secondIndex);
        aBuffer = aBuffer + "$";
        aBuffer = aBuffer + MyQcDataStructure.QCPrintingOper.get(__secondIndex);
        aBuffer = aBuffer + "$";
        aBuffer = aBuffer + MyQcDataStructure.QCProductGorup.get(__secondIndex);
        aBuffer = aBuffer + "$";
        aBuffer = aBuffer + MyQcDataStructure.QCProductSeries.get(__secondIndex);
        aBuffer = aBuffer + "$";
        aBuffer = aBuffer + MyQcDataStructure.QCProduct.get(__secondIndex);
        aBuffer = aBuffer + "$";
        aBuffer = aBuffer + MyQcDataStructure.QCPDefect.get(__secondIndex);
        aBuffer = aBuffer + "$";
        aBuffer = aBuffer + MyQcDataStructure.QCPCBType.get(__secondIndex);
        aBuffer = aBuffer + "$";
        aBuffer = aBuffer + MyQcDataStructure.QCCA.get(__secondIndex);
        aBuffer = aBuffer + "$";

    }
    txtData.setText(aBuffer);
    myReader.close();
    Toast.makeText(getBaseContext(),
            "Done reading santosh SD 'mysdfile.txt'",
            Toast.LENGTH_SHORT).show();
}   

如果您能帮助解决此问题,我们将不胜感激。

您的开关块中没有默认案例。所以当列达到11时,就有一个无限循环

到您的switch语句,或者执行以下操作

while (tokenizer.hasMoreTokens() && columnIndex <= 10)

while(tokenizer.hasMoreTokens()&&columnIndex
String aBuffer;
真的想成为一个StringBuffer。这一行没有问题。.当循环挂起应用程序时。.是否有可能在您的切换中未涵盖的情况?如果是这种情况,标记器将不会前进到下一个元素。请尝试添加
默认值:
案例,如果有任何问题出现,请记录。否its也不使用默认条件…然后在代码中添加跟踪或调试它以查看它的确切挂起位置。并确保没有引发任何异常。
default : 
    tokenizer.nextToken();
    break;
while (tokenizer.hasMoreTokens() && columnIndex <= 10)