Bufferedreader.readline () вызывает бесконечный цикл - PullRequest
1 голос
/ 29 марта 2019

Я хочу прочитать текстовый файл, но бесконечный цикл всегда появляется в strLine.split .... Я получил ожидаемое значение массива, "6".Но когда я создал новый br.readline перед strLine.startsWith, бесконечный цикл больше не отображается, но значение массива равно "2".Мне нужно получить «6» для запуска некоторого кода внутри условия.

try {
            val file = File(Environment.getExternalStorageDirectory().toString() + "/drawings/$fileName.txt")
            Timber.d("FILENAME -----> ${file.exists()}")
            val fStream = FileInputStream(file)
            Timber.d("FSTREAM -----> ${fStream == null}")
            val dataInput = DataInputStream(fStream)
            Timber.d("DATAINPUT -----> ${dataInput == null}")
            val br = BufferedReader(InputStreamReader(dataInput))
            val strLine = br.readLine()
            Timber.d("STRLINE -----> $strLine")
            var strData: Array<String>
            var colorIndex: Int
            var sizeIndex: Int
            // Close the input stream
            while ((strLine) != null)
                if (strLine.startsWith("START")) {
//                    val strLine = br.readLine()
                    strData = strLine.split(" ".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
                    Timber.d("STRDATA ---> ${strData.size}")
                    if (strData.size == 6) {
                        colorIndex = Integer.parseInt(strData[2])
                        sizeIndex = Integer.parseInt(strData[5])

                        when (Integer.parseInt(strData[1])) {
                            1 -> {
                                action = EditAction.PEN
                                when (colorIndex) {
                                    0 -> this.color = Color.GREEN
                                    1 -> this.color = android.graphics.Color.rgb(255, 192, 203) // PINK
                                    2 -> this.color = Color.YELLOW
                                    3 -> this.color = Color.BLUE
                                    4 -> this.color = Color.BLACK
                                }
                                when (sizeIndex) {
                                    0 -> this.size = Size.SIZE_1
                                    1 -> this.size = Size.SIZE_2
                                    2 -> this.size = Size.SIZE_3
                                    3 -> this.size = Size.SIZE_4
                                    4 -> this.size = Size.SIZE_5
                                }
                            }
                        }

                        touchStart(parseFloat(strData[3]),
                                parseFloat(strData[4]))
                    } else {
                        return
                    }
                } else {
                    strData = strLine.split(" ".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
                    if (strData.size == 2) {
                        touchMove(parseFloat(strData[0]),
                                parseFloat(strData[1]))
                    }
                }
            dataInput.close()
        } catch (e: FileNotFoundException) {
            // TODO Auto-generated catch block
            e.printStackTrace()
        } catch (e: IOException) {
            // TODO Auto-generated catch block
            e.printStackTrace()
        }

1 Ответ

1 голос
/ 29 марта 2019

Если все, что вы хотите сделать, это обрабатывать файл построчно, то добавьте strLine = br.readLine () непосредственно перед концом цикла while. Не забудьте добавить {} для цикла while, потому что в блоке будет более 1 оператора

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