0

Java プログラムの出力を取得してファイルに書き込もうとしています。

ユーザーが、ファイルに含めてはならないデータを入力しました。プログラムが応答すると、ユーザーに情報を出力するだけでなく、出力をファイルに書き込む必要があります。

例から、ドライバークラスの一番上でこれから始めました:

static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static String lineFromOutput;

このコードは、プログラムから出力を受け取る可能性のあるすべての場所にあります。

try {
    lineFromInput = in.readLine();
    FileWrite.write(lineFromInput);
} catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
}

そして、その呼び出しは次のとおりです。

public class FileWrite {
    public static void write(String message) { 
        PrintWriter out = null;
        try {
            out = new PrintWriter(new FileWriter("output.txt"), true);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        out.write(message);
        out.close();
    }
}

出力ファイルを作成しますが、それだけです。プログラムからの出力は何も書き込まれません。私は数多くの例を見てきましたが、これがボールを転がすための最も簡単な方法のようですが、他の提案も受け付けています。

ありがとう!

4

3 に答える 3

2

writeを呼び出すたびに、テキストファイルが開いたり閉じたりします。開くたびに上書きされるので、最後に書き込んだものだけがファイルに表示されると思います。

コンストラクターから出力ファイルを開き、closeメソッドから閉じることをお勧めします。

于 2012-11-07T04:23:26.740 に答える
0

コードを使用してみてください。わたしにはできる。出力先に一致するようにファイル パスを変更するだけです。ここでは、好ましいと思われる BufferedWriter を使用しています。

public static void main(String[] args) {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String lineFromOutput;

try {
    lineFromOutput = in.readLine();
    FileWrite.write(lineFromOutput);
} catch (IOException e) {
// TODO Auto-generated catch block
 e.printStackTrace();
}



}

public static class FileWrite {
    private static void write(String message) throws IOException { 
      BufferedWriter out = null;
    try {
        out = new BufferedWriter(new FileWriter(new File("C:\\Users\\Teresa\\Dropbox\\output.txt")));
        //Replace the above line with your path.
        out.write(message);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
      out.close();
    }
}
于 2012-11-07T04:18:11.407 に答える
0

以下のステートメントでInputStremReaderは、シングルを使用する必要があると思います。t

static BufferedReader in= new BufferedReader(new OutputtStreamReader(System.in));
static String lineFromOutput;

として

static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static String lineFromOutput;

編集:これはうまくいきます。入力コンソールから入力を提供していることを確認してください。また、読み取りと書き込み (上書き) は 1 行のみであることに注意してください。

    public class FileWrite {
       public static void write(String message) { 
                PrintWriter out = null;
              try {
                  out = new PrintWriter(new FileWriter("output.txt"), true);
              } catch (IOException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
              }
                out.write(message);
                out.close();
        }

       public static void main(String[] args){
           String lineFromInput;
           try {
                BufferedReader in = new BufferedReader(
                                            new InputStreamReader(System.in));
                lineFromInput = in.readLine();
                FileWrite.write(lineFromInput);
                in.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
           }
       }
     }

編集 2: 複数行入力用のプログラムを更新しました。書き込むたびにファイルを開いたり閉じたりするのは最善の方法ではありませんが、小さな変更でプログラムが機能するようにしようとしています。出力ファイルを繰り返し開いたり閉じたりしないようにするための提案が必要な場合は、お知らせください。

変更のハイライト:

  1. 入力で "exit" (必要に応じて単語を変更) が受信されるまで行を読み取ります
  2. モードでファイルを開きappendます。

    public class FileWrite {
       public static void write(String message) { 
                PrintWriter out = null;
              try {
                  out = new PrintWriter(new FileWriter("output.txt", true), true);
              } catch (IOException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
              }
                out.write(message);
                out.close();
        }
    
       public static void main(String[] args){
           String lineFromInput = "";
           try {
                System.out.println("Provide the inputs in any number of lines");
                System.out.println("Type \"exit\" in new line when done");
                BufferedReader in = new BufferedReader(
                                    new InputStreamReader(System.in));
                while(!"exit".equals(lineFromInput)){
                   lineFromInput = in.readLine();
                   FileWrite.write(lineFromInput+System.lineSeparator());
                }
                in.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
           }
       }
     }
    

EDIT3:Scanner入力を読み取るために使用する更新されたプログラム:

        private static HashMap<Integer, Object> shapes = 
                                              new HashMap<Integer, Object>();
        static int i = 0;

        public static void main(String[] args) {
            PrintWriter output = null;
            Scanner scanner = new Scanner(System.in);
            try {
                output = new PrintWriter(new FileWriter("output.txt"), true);
            } catch (IOException e1) {
                System.err.println("You don't have accress to this file");
                System.exit(1);
            }
            String command = "";
            while(!"quit".equalsIgnoreCase(command)){
                System.out.println("Enter your Command: ");
                command = scanner.next();
                if (command.equalsIgnoreCase("create")) {
                    String type = scanner.next();
                    if (type.equalsIgnoreCase("line")) {
                        double length = scanner.nextDouble();
                        Line l = new Line(length);
                        scanner.nextLine();//flush the previous line
                        String line = scanner.nextLine();
                        output.format("%s", line);
                        shapes.put(i, l);
                        i++;
                    }else if (type.equalsIgnoreCase("circle")) {
                        double radius = scanner.nextDouble();
                        String color = scanner.next();
                        Circle c = new Circle(radius, Colors.valueOf(color));
                        scanner.nextLine();//flush the previous line
                        String line = scanner.nextLine();
                        output.format("%s", line);
                        shapes.put(i, c);
                        i++;
                    }else if (type.equals("rectangle")) {
                        double length = scanner.nextDouble();
                        double width = scanner.nextDouble();
                        String color = scanner.next();
                        Rectangle r = new Rectangle(length, width,
                        Colors.valueOf(color));
                        scanner.nextLine();//flush the previous line
                        String line = scanner.nextLine();
                        output.format("%s", line);
                        shapes.put(i, r);
                        i++;
                    }else if (type.equals("square")) {
                        double length = scanner.nextDouble();
                        String color = scanner.next();
                        Square s = new Square(length, Colors.valueOf(color));
                        scanner.nextLine();//flush the previous line
                        String line = scanner.nextLine();
                        output.format("%s", line);
                        shapes.put(i, s);
                        i++;
                    }
                }else if (command.equals("printbyperimeter")) {
                    Shape[] shapeArray = shapes.values().toArray(new Shape[0]);
                    Arrays.sort(shapeArray);
                            System.out.println("Print in ascending order...");
                    for (int j = 0; j < shapeArray.length; j++) {
                        Shape temp = shapeArray[j];
                        if (temp.getClass().getName().equals("Line")) {
                            System.out.println("Shape: " 
                                    + temp.getClass().getName() + ", Perimeter: "
                                    + temp.getPerimeter());
                                } else {
                            System.out.println("Shape: " 
                                    + temp.getClass().getName() + ", Color: "
                                    + ((Colorable) temp).getColor()
                                    + ", Perimeter: " + temp.getPerimeter());
                                }
                            }
                }else if (command.equals("printbyarea")) {
                    Shape[] shapeArray = shapes.values().toArray(new Shape[0]);
                    System.out.println("Print in random order...");
                    for (int j = 0; j < shapeArray.length; j++) {
                        Shape temp = shapeArray[j];
                        if (!temp.getClass().getName().equals("Line")) {
                            System.out.println("Shape: "
                                    + temp.getClass().getName() + ", Color: "
                                    + ((Colorable) temp).getColor() + ", Area: "
                                    + ((Areable) temp).getArea());
                                }
                        }
                }else if (command.equals("quit")) {
                    scanner.close();
                    System.exit(0);
                }
           }
           output.close();
        }
于 2012-11-07T03:55:29.333 に答える