猿问

Java "while != null" 读取最后一行为 null

我正在尝试使用 URL 的批处理文件运行以下代码,而 URL 不为空。它完全按照我想要的方式运行,但是,输出的最后一行是:


格式错误的 URL 异常:“null”不是有效输入


批处理程序成功完成


我希望程序在实际读取 null 之前立即停止。有什么建议么?


(此外,我仍在学习如何提问而不让人们生我的气,所以如果我可以改进我的问题,请告诉我而不是投反对票。谢谢。)


private static String getBatchUrlContents(String filePath) {

        logger.debug(">>getBatchUrlContents()");

        String theUrl = "";

        try {

            FileReader fileReader = new FileReader(filePath);

            BufferedReader bufferedUrlReader = new BufferedReader(fileReader);

            do {

                try {

                    theUrl = bufferedUrlReader.readLine();

                    URL url = new URL(theUrl);

                    HttpURLConnection urlConnection = (HttpURLConnection)  url.openConnection();


                urlConnection.setRequestMethod("GET");

                String contentType = urlConnection.getContentType();

                logger.info("Content Type: {}", contentType);

                int statusCode = urlConnection.getResponseCode();

                logger.info("Status Code: {}", statusCode);



                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));

                String line;


                List<String> contents = new ArrayList<String>(); 

                while ((line = bufferedReader.readLine()) != null) {

                    contents.add(line);

                }

                bufferedReader.close();

                String[] contentArray = contents.toArray(new String[contents.size()]);

                System.out.println("\n ~~~~~~~NEW URL~~~~~~~ \n" + theUrl);

                for (String x :contentArray)

                    System.out.println(x);


                String firstLine = contentArray[0];


                if (firstLine.equals("#EXTM3U")) {

                    logger.info("First line is validated: {}", firstLine);

                    System.out.println("First line of content is validated: " + firstLine);

                } 


森林海
浏览 177回答 1
1回答

翻翻过去那场雪

检查theUrl != null发生在循环结束时;它不是连续检查的。如果您需要theURL非 - null,则需要检查一下。您可以在条件下进行分配(尽管这在某些圈子中不受欢迎):while((theUrl = bufferedUrlReader.readLine()) != null) {&nbsp; &nbsp; URL url = new URL(theUrl);&nbsp; &nbsp; ...或者,只需在循环内进行检查并进行手动操作break:while(true) {&nbsp; &nbsp; theUrl = bufferedUrlReader.readLine();&nbsp; &nbsp; if (!theURL) { // Or "if (theURL == null)"&nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; }&nbsp; &nbsp; URL url = new URL(theUrl);&nbsp; &nbsp; ...
随时随地看视频慕课网APP

相关分类

Java
我要回答