Java 这可以简化为方法吗?

Java 这可以简化为方法吗?,java,exception-handling,Java,Exception Handling,我有这个异常处理代码。我想知道它是否可以简化为方法,而不是将其全部放在主方法中。或者单独上课会更好吗?非常感谢 import java.util.Scanner; import java.io.*; class ReadWrite { public static void main(String args[]) { try { File myFile = new File("fruits.txt"); Scanner sc

我有这个异常处理代码。我想知道它是否可以简化为方法,而不是将其全部放在主方法中。或者单独上课会更好吗?非常感谢


import java.util.Scanner;
import java.io.*;
class ReadWrite {
    public static void main(String args[]) {
        try {
            File myFile = new File("fruits.txt");
            Scanner sc = new Scanner(System. in );
            FileWriter fw = new FileWriter(myFile, true);
            PrintWriter pw = new PrintWriter(fw);
            String fn = "";
            while (!fn.equals("exit")) {
                System.out.println("Please enter the fruit name or enter exit");
                fn = sc.nextLine();
                if (!fn.equals("exit")) {
                    pw.println(fn);
                }
            }
            pw.close();
            Scanner readFile = new Scanner(myFile);
            int i = 1;
            while (readFile.hasNextLine()) {
                System.out.println(i + ": " + readFile.nextLine());
                i++;
            }
            readFile.close();
        } catch (Exception e) {
            e.printStackTrace(); //shows all problems in list
        }
    }
}

单一责任原则->每件“事情”都应该有单一责任。 因此,简短的回答是肯定的,你可以,你应该,长答案:

class ReadWrite
{
    public static void main(String args[])
    {
        DataRequester dataRequester = new DataRequester(new ConsolePrinter());
        String myFileName = "fruits.txt";
        FruitWriter fruitWriter = new FruitWriter();
        FruitPrinter fruitPrinter = new FruitPrinter(new ConsolePrinter());

        fruitWriter.writeFruits(dataRequester, myFileName);
        fruitPrinter.printFruitsFrom(myFileName);
    }
}

interface Printer
{
    void print(String string);
}

class FileWriterFactory
{
    public FileWriter createFrom(String path)
    {
        try
        {
            return new FileWriter(path, true);
        } catch (IOException e)
        {
            throw new RuntimeException(e);
        }
    }
}

class ConsolePrinter implements Printer
{

    @Override
    public void print(String string)
    {
        System.out.println(string);
    }
}

class DataRequester
{
    private final Printer printer;

    DataRequester(Printer printer)
    {
        this.printer = printer;
    }

    public void requestForDataOf(String type)
    {
        printer.print(String.format("Please enter the %s name or enter exit", type));
    }
}

class FruitWriter{

    public void writeFruits(DataRequester dataRequester, String myFileName)
    {
        FileWriter fw = new FileWriterFactory().createFrom(myFileName);
        Scanner sc = new Scanner(System.in);
        PrintWriter pw = new PrintWriter(fw);

        String fn = "";

        while (shouldExit(fn))
        {
            dataRequester.requestForDataOf("fruit");

            fn = sc.nextLine();
            if (shouldExit(fn))
            {
                pw.println(fn);
            }
        }

        pw.close();
    }


    private static boolean shouldExit(String fn)
    {
        return !fn.equals("exit");
    }
}

class FruitPrinter{
    private final Printer printer;

    FruitPrinter(Printer printer)
    {
        this.printer = printer;
    }

    public void printFruitsFrom(String path){
        Scanner readFile = new Scanner(path);

        int line = 1;
        while (readFile.hasNextLine())
        {
            printer.print(String.format("Line %s: %s", line, readFile.nextLine()));
            line++;
        }

        readFile.close();
    }
}
显然,这需要分为文件,每个类的文件。 注意,现在一切都清楚了。 通过阅读主要的方法,我了解了这个应用程序,我确切地知道除了从它做什么。 它写水果。 然后打印出来

从哪里来?去哪里? 我不在乎。 如果我在乎的话,我会查看实现

另外,请查看打印机的分离情况。 我的打印机不知道他打印到哪里,他也不需要知道。 我给了他一台打印机,打印机知道如何打印,这才是最重要的。 如果明天我想使用文件打印机,我会更改这一行:

FruitPrinter fruitPrinter = new FruitPrinter(new ConsolePrinter());

没有人会知道其中的区别!
这是SOLID的另外两个原则,OCP和DIP,我建议你阅读它们。

这个问题似乎离题了,因为它是关于代码审查(try)。关于
“我想知道它是否可以简化为方法,而不是将其全部放在主方法中”
--回答:是的,但你应该是那个尝试这样做的人。主要的方法应该是简短的,并且应该主要是让你的程序启动并运行,而不是其他什么。关于,
“或者单独的类更好吗?”
——通常程序不仅仅有文件IO,文件IO应该与程序的其他部分分开,是的,在单独的类中,通常在单独的包中。
FruitPrinter fruitPrinter = new FruitPrinter(new FilePrinter());