Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将布尔值设置为true,但filewriter仍会覆盖文件,有什么建议吗?_Java_Filewriter - Fatal编程技术网

Java 将布尔值设置为true,但filewriter仍会覆盖文件,有什么建议吗?

Java 将布尔值设置为true,但filewriter仍会覆盖文件,有什么建议吗?,java,filewriter,Java,Filewriter,我创建了一个简单的程序,使用不同的算法对输入文件中的整数进行排序。我还使用filewriter将结果输出到另一个文件。不幸的是,无论我如何更改代码,文件都会被覆盖。有什么建议吗 一直在谷歌上搜索答案,并试图改变我输入语法的方式,但没有任何效果 重要信息: 设置编写器 try { FileWriter fileWriter = new FileWriter ("Sorted output.txt"); //BufferedWriter bufferedWrite

我创建了一个简单的程序,使用不同的算法对输入文件中的整数进行排序。我还使用filewriter将结果输出到另一个文件。不幸的是,无论我如何更改代码,文件都会被覆盖。有什么建议吗

一直在谷歌上搜索答案,并试图改变我输入语法的方式,但没有任何效果

重要信息:

设置编写器

try {

        FileWriter fileWriter = new FileWriter ("Sorted output.txt");

        //BufferedWriter bufferedWriter = new BufferedWriter (fileWriter);

        PrintWriter out = new PrintWriter (new FileWriter("Sorted output.txt", true));
输出到文件

 out.println("User's own data set sorted using bubble sort.");
                      out.println(unsortedArray + Arrays.deepToString(FileOne));
                      out.println("Sorted Array looks like this:" + Arrays.toString(intArrayBubble));
                      out.println(timeToSort + bubbleSortIs + bubbleTime + "ms");
它工作得很好,但是它在do while循环中使用,带有嵌套的if语句,并且每个语句都覆盖另一个

代码的其余部分,以防其需要-已更新-仍不工作

import java.io.*;
import java.util.*;
import java.util.concurrent.TimeUnit;

public class PDD_Sorting {

    public static void main (String [] pArgs) 
    {

        //Array for a file
        String[] FileOne;
        FileOne = new String[0];



        int optionOne = 1,
            optionTwo = 2,
            optionThree = 3,
            secondaryOptionOne = 1,
            secondaryOptionTwo = 2,
            secondaryOptionThree = 3,
            userSelection,
            subUserSelection;

        String     unsortedArray = "Unsorted array is: ",
                   bubbleSort = "Sorted array using bubble sort: ",
                   selectionSort = "Sorted array using selection sort: ",
                   insertionSort = "Sorted array using insertion sort: ",
                   timeToSort = "Time needed to sort this array using ",
                   bubbleSortIs = "bubble sort is ",
                   selectionSortIs = "selection sort is ",
                   insertionSortIs = "insertion sort is ",
                   welcomeToSorter = "Welcome to the SORTER - program that can sort your txt files containing integeres in an ascending order!",
                   notFiles = "Integers, not files :)",
                   pleaseSelect = "Please select one of the following options, by enetering a number asociated with it.",
                   optionOneUserInput = "1. Sort your own data set - input your own set of data (integers, separated by colons, no spaces) into the Input file.",
                   optionTwoPredefined = "2. Use predetermind set of data to test the algorythms.",
                   optionThreeExit = "3. Exit the program.",
                   subMenuPleaseSelect = "Please select which algorythm would you like to use to sort this file.",
                   optionBubble = "(1) - Bubble Sort.",
                   optionSelection = "(2) - Selection Sort.",
                   optionInsertion = "(3) - Insertion Sort.",
                   usersDataBubble = "User's own data set sorted using bubble sort.",
                   sortedArrayLooks = "Sorted Array looks like this:",
                   msTime = "ms",
                   usersDataSelection = "User's own data set sorted using selection sort.",
                   usersDataInsertion = "User's own data set sorted using insertion sort.",
                   validOption = "Please enter a valid option i.e. 1,2 or 3",
                   lessThanZero = "If time shown in ms is 0, that means the time needed to conduct the sort is shorter than 1ms.",
                   fileCreated = "File created.",
                   terminatingProgram = "Terminating the program.",
                   unableToWriteFile = "Unable to write to file";


        System.out.println(welcomeToSorter);
        System.out.println(notFiles);

        Scanner tInput = new Scanner (System.in);

        try {

        FileWriter fileWriter = new FileWriter ("Sorted output.txt");

        //BufferedWriter bufferedWriter = new BufferedWriter (fileWriter);

        PrintWriter out = new PrintWriter (new FileWriter("Sorted output.txt", true));

        do {

            System.out.println(pleaseSelect);
            System.out.println(optionOneUserInput);
            System.out.println(optionTwoPredefined);
            System.out.println(optionThreeExit);

        //  Scanner tInput = new Scanner (System.in);
            userSelection = tInput.nextInt();

            if (userSelection == optionOne) {
                //System.out.println("Please enter a valid path for your file.");
                String[] splitFile = null;
                //String userFile = tInput.next();
                FileOne = getAndPrepareFile(splitFile);

                System.out.println(subMenuPleaseSelect);
                System.out.println(optionBubble);
                System.out.println(optionSelection);
                System.out.println(optionInsertion);
                subUserSelection = tInput.nextInt();

                if (subUserSelection == secondaryOptionOne) {
                    int size = FileOne.length;
                      int [] intArrayBubble = new int [size];
                      for(int i=0; i<size; i++) {
                         intArrayBubble[i] = Integer.parseInt(FileOne[i]);
                      }

                      bubbleSort(intArrayBubble);
                      long bubbleTime = timeCount(intArrayBubble);

                      out.println(usersDataBubble);
                      out.println(unsortedArray + Arrays.deepToString(FileOne));
                      out.println(sortedArrayLooks + Arrays.toString(intArrayBubble));
                      out.println(timeToSort + bubbleSortIs + bubbleTime + msTime);



                }

                else if (subUserSelection == secondaryOptionTwo) {
                    int size2 = FileOne.length;
                      int [] intArraySelection = new int [size2];
                      for(int i=0; i<size2; i++) {
                         intArraySelection[i] = Integer.parseInt(FileOne[i]);
                      }

                      doSelectionSort(intArraySelection);   
                      long selectionTime = timeCount(intArraySelection);

                      out.println(usersDataSelection);
                      out.println(unsortedArray + Arrays.deepToString(FileOne));
                      out.println(sortedArrayLooks + Arrays.toString(intArraySelection));
                      out.println(timeToSort + selectionSortIs + selectionTime + msTime);       

                }

                else if (subUserSelection == secondaryOptionThree) {
                     int size3 = FileOne.length;
                      int [] intArrayInsertion = new int [size3];
                      for(int i=0; i<size3; i++) {
                         intArrayInsertion[i] = Integer.parseInt(FileOne[i]);
                      }

                      doInsertionSort(intArrayInsertion);
                      long insertionTime = timeCount(intArrayInsertion);

                      out.println(usersDataInsertion);
                      out.println(unsortedArray + Arrays.deepToString(FileOne));
                      out.println(sortedArrayLooks + Arrays.toString(intArrayInsertion));   
                      out.println(timeToSort + insertionSortIs + insertionTime + msTime);

                }
                else {
                    System.out.println(validOption);
                    tInput.next();
                }

            }

            else if (userSelection == optionTwo){
                //file being prepared and loaded via function
                String[] splitFilePredefined = null;
                FileOne = getAndPrepareFilePredefined(splitFilePredefined);

                //converting string array into int array so the method can sort it.
                int size = FileOne.length;
                  int [] intArrayBubble = new int [size];
                  for(int i=0; i<size; i++) {
                     intArrayBubble[i] = Integer.parseInt(FileOne[i]);
                  }

                  int size2 = FileOne.length;
                  int [] intArraySelection = new int [size2];
                  for(int i=0; i<size2; i++) {
                     intArraySelection[i] = Integer.parseInt(FileOne[i]);
                  }

                  int size3 = FileOne.length;
                  int [] intArrayInsertion = new int [size3];
                  for(int i=0; i<size3; i++) {
                     intArrayInsertion[i] = Integer.parseInt(FileOne[i]);
                  }

                  //inserting pre-prepared int arrays into variables including a timecount method
                    int bubbleTime = timeCount(intArrayBubble);
                    int selectionTime = timeCount(intArraySelection);
                    int insertionTime = timeCount(intArrayInsertion);

                  //sorting array using various sorts
                    bubbleSort(intArrayBubble);
                    doSelectionSort(intArraySelection);     
                    doInsertionSort(intArrayInsertion); 

                    //out.println("Sorted arrray using insertion sort looks like this: " + Arrays.toString(intArrayInsertion));
                    out.println(timeToSort + bubbleSortIs + bubbleTime + "ms");
                    out.println(timeToSort + selectionSortIs + selectionTime + "ms");
                    out.println(timeToSort + insertionSortIs + insertionTime + "ms");
                    out.println(lessThanZero);

                    System.out.println(fileCreated); 

            }

            else if (userSelection == optionThree){
                System.out.println(terminatingProgram);
                System.exit(0);

            }
            else {
                System.out.println(validOption);
                tInput.next();
            }

            out.flush();
            out.close();
            //tInput.close();
        }while (userSelection != optionThree);  


        }

        catch (Exception e)
        {

            System.out.println(unableToWriteFile);
            tInput.next();
        }


        tInput.close();

    }//end main     

    //method that fetches the file from predefined, hardcoded location and removes comas, esentially prepares the file for the next phase
    private static String[] getAndPrepareFile (String[] splitFile)

    {

        Scanner fileIn = null;

        try 
        {

            fileIn = new Scanner(new FileInputStream("C:\\Users\\Greg\\Documents\\Programming\\PDD - Assignment 1\\Input.txt"));

            String fileNew = fileIn.next();

            splitFile = fileNew.split(",");

            //System.err.println(Arrays.toString(splitFile)); //Arrays.toString needed to print the array correctly, otherwise it prints the address of the object

            fileIn.close();


        }
        catch (IOException e)
        {

            System.out.println("File not found.");
            //System.exit(0);
        }
        return splitFile;



    }   
    //as above but works for predefined file, that can be generated using randomNumber.java program
    private static String[] getAndPrepareFilePredefined (String[] splitFilePredefined)
    {

        Scanner fileIn = null;

        try 
        {

            fileIn = new Scanner(new FileInputStream("C:\\Users\\Greg\\Documents\\Programming\\PDD - Assignment 1\\Generated input.txt"));

            String fileNew = fileIn.next();

            splitFilePredefined = fileNew.split(",");

            //System.err.println(Arrays.toString(splitFile)); //Arrays.toString needed to print the array correctly, otherwise it prints the address of the object

            fileIn.close();


        }
        catch (IOException e)
        {

            System.out.println("File not found.");
            //System.exit(0);
        }
        return splitFilePredefined;



    }   
    //method used to sort a file using bubble sort
    private static void bubbleSort(int[] arr) { 


        int n = arr.length;  
        int temp = 0;  
         for(int i=0; i < n; i++){  
                 for(int j=1; j < (n-i); j++){  
                          if(arr[j-1] > arr[j]){  
                                 //swap elements  
                                 temp = arr[j-1];  
                                 arr[j-1] = arr[j];  
                                 arr[j] = temp;  
                         }  

                 }  
         }  

    }  
    //method used to sort a file using selection sort
    private static int[] doSelectionSort(int[] arr){

        for (int i = 0; i < arr.length - 1; i++)
        {
            int index = i;
            for (int j = i + 1; j < arr.length; j++)
                if (arr[j] < arr[index]) 
                    index = j;

            int smallerNumber = arr[index];  
            arr[index] = arr[i];
            arr[i] = smallerNumber;
        }
        return arr;
    }
    //method used to sort a file using sinsertion sort
    private static int[] doInsertionSort(int[] input){

        int temp;
        for (int i = 1; i < input.length; i++) {
            for(int j = i ; j > 0 ; j--){
                if(input[j] < input[j-1]){
                    temp = input[j];
                    input[j] = input[j-1];
                    input[j-1] = temp;
                }
            }
        }
        return input;
    }
    //method used to calculate how much time has lapsed while using any of the given sort methods, outputs in ms, if less than 1 ms, outputs 0ms
    private static int timeCount (int[] anArray)
    {
        long start = System.nanoTime();
        Arrays.sort(anArray);
        long end = System.nanoTime();
        long timeInMillis = TimeUnit.MILLISECONDS.convert(end - start, TimeUnit.NANOSECONDS);
        //System.out.println("Time spend in ms: " + timeInMillis);

        return (int) timeInMillis;

    }

}//end class
import java.io.*;
导入java.util.*;
导入java.util.concurrent.TimeUnit;
公共类PDU排序{
公共静态void main(字符串[]pArgs)
{
//文件的数组
字符串[]FileOne;
FileOne=新字符串[0];
int optionOne=1,
选项wo=2,
选项树=3,
二次芳基选择酮=1,
第二选项wo=2,
第二选项树=3,
用户选择,
子用户选择;
字符串unsortedArray=“unsortedArray为:”,
bubbleSort=“使用冒泡排序进行排序的数组:”,
selectionSort=“使用选择排序对数组进行排序:”,
insertionSort=“使用插入排序对数组进行排序:”,
timeToSort=“使用排序此数组所需的时间”,
bubbleSortIs=“气泡排序为”,
selectionSortIs=“选择排序为”,
insertionSortIs=“插入排序为”,
welcomeToSorter=“欢迎使用SORTER-程序,该程序可以按升序对包含整数的txt文件进行排序!”,
notFiles=“整数,而不是文件:)”,
pleaseSelect=“请通过输入与之相关的数字,选择以下选项之一。”,
optionOneUserInput=“1.对您自己的数据集进行排序-将您自己的数据集(整数,用冒号分隔,无空格)输入到输入文件中。”,
optiontw预定义=“2.使用预先确定的数据集测试算法。”,
optionThreeExit=“3.退出程序。”,
子菜单PleaseSelect=“请选择要用于对该文件排序的算法。”,
optionBubble=“(1)-气泡排序。”,
optionSelection=“(2)-选择排序。”,
optionInsertion=“(3)-插入排序。”,
usersDataBubble=“用户自己的数据集使用气泡排序进行排序。”,
SorterDarrayLooks=“排序数组如下所示:”,
msTime=“ms”,
usersDataSelection=“使用选择排序对用户自己的数据集进行排序。”,
UsersDainservation=“用户自己的数据集使用插入排序进行排序。”,
validOption=“请输入有效选项,即1、2或3”,
lessThanZero=“如果以毫秒为单位显示的时间为0,则表示进行排序所需的时间小于1ms。”,
fileCreated=“文件已创建。”,
terminatingProgram=“正在终止程序。”,
unableToWriteFile=“无法写入文件”;
System.out.println(welcomeToSorter);
System.out.println(notFiles);
扫描器输入=新扫描器(系统输入);
试一试{
FileWriter FileWriter=newfilewriter(“Sorted output.txt”);
//BufferedWriter BufferedWriter=新的BufferedWriter(fileWriter);
PrintWriter out=新的PrintWriter(新的FileWriter(“Sorted output.txt”,true));
做{
系统输出打印项次(请选择);
System.out.println(可选中性输入);
System.out.println(optiontwo预定义);
System.out.println(可选退出);
//扫描器输入=新扫描器(系统输入);
userSelection=tInput.nextInt();
if(userSelection==optionOne){
//System.out.println(“请输入文件的有效路径”);
String[]splitFile=null;
//字符串userFile=tInput.next();
FileOne=getAndPrepareFile(splitFile);
System.out.println(子菜单请选择);
System.out.println(optionBubble);
系统输出打印LN(选项选择);
System.out.println(可选输入);
subUserSelection=tInput.nextInt();
if(subUserSelection==secondaryOptionOne){
int size=FileOne.length;
int[]intarraybuble=新的int[size];

对于(int i=0;i您不需要第一个
FileWriter FileWriter=newfilewriter(“Sorted output.txt”);
;这实际上是在创建/覆盖文件,然后您的PrintWriter会再次打开文件进行附加

所以,只要改变

// ... omitting beginning
try {
    FileWriter fileWriter = new FileWriter ("Sorted output.txt");
    //BufferedWriter bufferedWriter = new BufferedWriter (fileWriter);
    PrintWriter out = new PrintWriter (new FileWriter("Sorted output.txt", true));
    do { 
// ... omitting rest


您不需要第一个
FileWriter FileWriter=new FileWriter(“Sorted output.txt”);
;这实际上是在创建/覆盖文件,然后您的PrintWriter会再次打开它进行附加

所以,只要改变

// ... omitting beginning
try {
    FileWriter fileWriter = new FileWriter ("Sorted output.txt");
    //BufferedWriter bufferedWriter = new BufferedWriter (fileWriter);
    PrintWriter out = new PrintWriter (new FileWriter("Sorted output.txt", true));
    do { 
// ... omitting rest

移出。循环外的close()

            else {
                System.out.println("Please enter a valid option i.e. 1,2 or 3");
                tInput.next();
            }

            out.flush();
           /* THIS  -> out.close(); <- THIS */
            //tInput.close();
        }while (userSelection != optionThree);  
         out.close();

        }
else{
System.out.println(“请输入有效选项,即1、2或3”);
tInput.next();
}
out.flush();
/*这->out.close();将out.close()移出循环

            else {
                System.out.println("Please enter a valid option i.e. 1,2 or 3");
                tInput.next();
            }

            out.flush();
           /* THIS  -> out.close(); <- THIS */
            //tInput.close();
        }while (userSelection != optionThree);  
         out.close();

        }
else{
System.out.println(“请输入有效选项,即1、2或3”);
tInput.next();
}
out.flush();

/*这->out.close();这只会导致文件在每次运行时被覆盖,但我认为@Gregory Sky希望在用户每次运行时“附加”输出