【问题标题】:How do I write an array to a file?如何将数组写入文件?
【发布时间】:2017-08-31 23:30:06
【问题描述】:

我完全不知道如何将我的输出写入输出文件。我在下面提供了一些信息,希望能让自己更清楚。感谢任何可以帮助我的人。

输入1234时的输出(我需要将其写入txt文件):

Your original number was: 
1234
The reversed digits are: 
4321
The even digits are: 
2 4
The odd digits are:
1 3 

当前正在写入 txt 文件的内容:

Your original number was: 
1234

这是我现在的代码:

 import java.util.Scanner;
    import java.io.*;

    public class order {

    //Input validation. Allows any integer greater than 0. Any number starting 
    with 0 is invalid.

    private static void validate(Scanner input) { 

        String userEntry;       

        System.out.println("Please enter a positive integer greater than 0.");
        userEntry = input.nextLine();

        while (!userEntry.matches("^[1-9][0-9]*$")) {
            System.out.println("Invalid number. Try again");
            userEntry = input.nextLine();
        }

        try {
            FileWriter writer = new FileWriter("outDataFile.txt", true);
            PrintWriter outputfile = new PrintWriter(writer);

            outputfile.println("Your original number was: ");
            outputfile.println(userEntry);
            System.out.println("Your original number was: ");
            System.out.println(userEntry);

            System.out.println("The reversed digits are: ");
            reverse (input, userEntry);
            System.out.println();

            System.out.println("The even digits are: ");
            even (input, userEntry);
            System.out.println();

            System.out.println("The odd digits are: ");
            odd (input, userEntry);
            System.out.println();

            } catch (IOException e){            
        }            
    }

    //Reverses the order of digits.

    public static void reverse(Scanner keyboard, String intString) {

        int strsize = intString.length();
        int[] digits = new int[strsize];

        for (int i = 0; i < strsize; ++i)
        {
            String temp = Character.toString(intString.charAt(i));
            digits[i] = Integer.parseInt(temp);
        }

        for (int i = strsize - 1; i >= 0; --i)
        {
            System.out.print(digits[i]);
        }
    }

    //Extracts even numbers.
    public static void even (Scanner keyboard2, String intString2) {

        int strsize2 = intString2.length();
        int[] digits2 = new int[strsize2];

        for (int i = 0 ; i < strsize2 ; ++i) {

                String temp = Character.toString(intString2.charAt(i));
                digits2[i] = Integer.parseInt(temp);

                if(digits2[i] % 2 == 0) {
                System.out.print(digits2[i] + " ");
            }   
        }                                           
    }

    //Extracts odd numbers.

    public static void odd (Scanner keyboard3, String intString3) {

        int strsize3 = intString3.length();
        int[] digits3 = new int[strsize3];

        for (int i = 0 ; i < strsize3 ; ++i) {

                String temp = Character.toString(intString3.charAt(i));
                digits3[i] = Integer.parseInt(temp);

                if(digits3[i] % 2 != 0) {

                System.out.print(digits3[i] + " ");                             
            }   
        }                                           
    }

    //Allows continuous input.

    public static void main(String[] args) {                

        Scanner keyboard = new Scanner(System.in);

        boolean validate = true;            
        while (validate) {
        validate(keyboard);

        boolean invalid = true;                                                                     
        while (invalid) {
            System.out.println( "Would you like to try another calculation? [y/n]" );               

            Scanner input = new Scanner(System.in);
            char answer;
            String option = input.next();   

            if ("y".equalsIgnoreCase(option)) {                         
                invalid = false;
            }   
            else if ("n".equalsIgnoreCase(option)) {                    
                invalid = false;
                validate = false;
                    System.out.println( "Goodbye." );               
                    input.close();
            }
            else {                                                                                  
                System.err.println("The only valid answers are y/n.");
                System.out.println();
            }
            }
        }
    }
}   

【问题讨论】:

  • 您永远不会使用您的PrintWriter 打印原始号码以外的任何内容。因此,这就是您在输出文件中看到的全部内容。
  • 欢迎来到 Stack Overflow!我想 95% 的代码与你的问题无关。请创建一个 Minimal, Complete and Verifiable Example 来证明您的问题。
  • System.out 的输出是您所期望的吗?如果是这样,为什么不直接将您的PrintWriter 传递给您的其他方法并以与第一行相同的方式编写?
  • 你还想写什么?您打印的所有其他内容?还是只是其中的一部分?
  • @petehallw 抱歉,您能帮我介绍一下吗。我不知道该怎么做。我实际上仍在学习如何通过方法传递对象。

标签: java


【解决方案1】:

我已经测试了以下代码,该代码可用于将反向数字写入文件。您可以将相同的技术应用于其他方法。请注意,我使用 PrintWriter.print 而不是 PrintWriter.println 来获取同一行上的所有数组元素。

public class Order {

    PrintWriter outputfile;
    FileWriter writer;

    public void validate(Scanner input) { 

        String userEntry;       

        System.out.println("Please enter a positive integer greater than 0.");
        userEntry = input.nextLine();

        while (!userEntry.matches("^[1-9][0-9]*$")) {
            System.out.println("Invalid number. Try again");
            userEntry = input.nextLine();
        }

        try {
            writer = new FileWriter("outDataFile.txt", true);
            outputfile = new PrintWriter(writer);

            outputfile.println("Your original number was: ");
            outputfile.println(userEntry);
            outputfile.flush();
            System.out.println("Your original number was: ");
            System.out.println(userEntry);

            System.out.println("The reversed digits are: ");
            outputfile.println("The reversed digits are: ");
            reverse (input, userEntry, writer);
            System.out.println();

        } catch (IOException e){            
        }            
    }

    //Reverses the order of digits.
    public void reverse(Scanner keyboard, String intString, FileWriter writer) {

        outputfile = new PrintWriter(writer);

        int strsize = intString.length();
        int[] digits = new int[strsize];

        for (int i = 0; i < strsize; ++i)
        {
            String temp = Character.toString(intString.charAt(i));
            digits[i] = Integer.parseInt(temp);
        }

        for (int i = strsize - 1; i >= 0; --i)
        {         
            System.out.print(digits[i]);
            outputfile.print(digits[i]);
            outputfile.flush();
        }
    }   
}

【讨论】:

  • 谢谢。这很有帮助。
  • @Navi4458 太好了!刷新PrintWriter 是重要的一步。如果您对答案满意,能否将答案标记为已接受?
【解决方案2】:

问题出在您的 try 块中。

不正确:

outputfile.println("Your original number was: ");
        outputfile.println(userEntry);
        System.out.println("Your original number was: ");
        System.out.println(userEntry);

    System.out.println("The reversed digits are: ");
    reverse (input, userEntry);
    System.out.println();

    System.out.println("The even digits are: ");
    even (input, userEntry);
    System.out.println();

    System.out.println("The odd digits are: ");
    odd (input, userEntry);
    System.out.println();

问题:您几乎必须将System.out.printlnoutputfile.println 镜像

正确:

outputfile.println("Your original number was: ");
outputfile.println(userEntry);
System.out.println("Your original number was: ");
System.out.println(userEntry);

System.out.println("The reversed digits are: ");
reverse (input, userEntry);
System.out.println();
outputfile.println("The reversed digits are: ");
reverse (input, userEntry);
outputfile.println();


System.out.println("The even digits are: ");
even (input, userEntry);
System.out.println();
outputfile.println("The even digits are: ");
even (input, userEntry);
outputfile.println();

System.out.println("The odd digits are: ");
odd (input, userEntry);
System.out.println();
outputfile.println("The odd digits are: ");
odd (input, userEntry);
outputfile.println();

【讨论】:

  • 哦,不。我明白那个。我现在的问题是我的数组没有被写入文本文件。我已经编辑了输出示例和正在编写的内容。希望我已经让我的问题更清楚了。
  • @Navi4458 也许你必须添加一个命名奇数奇数的方法,或者一个命名偶数偶数的方法,并编写 outputfile.println("奇数是:" + 赔率) ; and outputfile.println("偶数位为:" + evens);
  • @Navi4458 也是一种反向数字的方法,对不起 ;-)
  • 我找了类似的帖子,发现了这个。我知道这有点不同,但如果它有帮助的话。 stackoverflow.com/questions/13707223/…
猜你喜欢
  • 2012-11-22
  • 2020-05-10
  • 1970-01-01
  • 1970-01-01
  • 2014-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多