Получение ошибки «Этот метод должен возвращать результат типа java.lang.String» - PullRequest
0 голосов
/ 29 октября 2018

Предположим, что file.txt содержит только "Hello". Когда я компилирую код Java, он показывает

Ошибка: этот метод должен возвращать результат типа java.lang.String в строке 5.

Когда я печатаю в readTxt функцию, которая работает, она может показывать «Привет». Я уже проверяю, что результат является правильным типом String, но он также показывает ошибку компилятора. Как я могу сделать возвращаемое значение для основной функции?

import java.io.*;
import java.lang.String;

public class ReadTxtFile {
public static String readTxt(String filePath) {

  try {
    File file = new File(filePath);
    if(file.isFile() && file.exists()) {
      InputStreamReader isr = new InputStreamReader(new FileInputStream(file),     "utf-8");
      BufferedReader br = new BufferedReader(isr);
      String lineTxt = null;
      lineTxt = br.readLine();
      //System.out.println(lineTxt);
      br.close();
      return lineTxt;
    } else {
    }
  } catch (Exception e) {
  }

  }
  public static void main(String[] args) {
    String filePath = "C:/file.txt";
    String fileword = readTxt(filePath);
    System.out.println(fileword);
  }

}

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Есть несколько рекомендаций, которые следует соблюдать, чтобы предотвратить будущие ошибки. Я пытался их прикрыть. Не сказать, что мой - идеальный, но вы поймете идею.

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class StackOverFlow {
    public static void main(String[] args) {

        try {
            String sText = getFileText("C:/file.txt");
            System.out.println("Text is: " + sText);
        } catch (FileNotFoundException e) {
            System.out.println("File not Found");
        } catch (IOException e) {
            System.out.println("@Error while reading text: " + e.getMessage());
        }
    }

    private static String getFileText(String filePath) throws FileNotFoundException, IOException {

        File file = new File(filePath);
        String line = null;
        StringBuilder stringBuilder = new StringBuilder();
        String ls = System.getProperty("line.separator");
        BufferedReader reader = null;
        try{
            reader = new BufferedReader(new FileReader(file));
            while ((line = reader.readLine()) != null) {
                stringBuilder.append(line);
                stringBuilder.append(ls);
            }
            reader.close();
        }finally {
            reader.close();
        }
        return new String(stringBuilder);
    }
}
0 голосов
/ 29 октября 2018

Вы обещали вернуть String из вашего метода, так что теперь вы должны это сделать. Единственный способ обойти это обещание - бросить исключение.

public static String readTxt(String filePath) { // Here you promise to return a String
  try {
    ...
    if(file.isFile() && file.exists()) {
      ...
      return lineTxt; // Here you return a String as promised
    } else {
      // Here you're missing either return or throw
    }
  } catch (Exception e) {
    // Here you're missing either return or throw
  }
}

Это принципиально проблема проектирования - что должен делать ваш метод, если по какой-то причине он не может прочитать файл? Вернуть специальную строку типа «Ошибка»? Вернуться null? Сбой и бросок и исключение? Что-то еще?

Ответьте себе, и вам будет понятно, как исправить код.

...