Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.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 为什么我的输出文件是空的?_Java_File - Fatal编程技术网

Java 为什么我的输出文件是空的?

Java 为什么我的输出文件是空的?,java,file,Java,File,当我遇到一个bug时,我正在为AP计算机科学课程做一个项目,该项目允许用户对音乐进行排序。程序以这种格式解析一行->年份(tab)等级(tab)艺术家(tab)头衔(tab)。然后,它可以按年份、排名、艺术家和/或标题对歌曲进行排序或过滤。此信息通过如下格式的输入文件加载: 2008 50 Ashley Tisdale He Said, She Said 2008 123 Taylor Swift Teardrops On My Guitar 2008 233 Fin

当我遇到一个bug时,我正在为AP计算机科学课程做一个项目,该项目允许用户对音乐进行排序。程序以这种格式解析一行->
年份(tab)等级(tab)艺术家(tab)头衔(tab)
。然后,它可以按年份、排名、艺术家和/或标题对歌曲进行排序或过滤。此信息通过如下格式的输入文件加载:

2008    50  Ashley Tisdale  He Said, She Said
2008    123 Taylor Swift    Teardrops On My Guitar
2008    233 Finger Eleven   Paralyzer
2008    258 Paramore    Misery Business
...

我不知道如何在不暴露我所有代码的情况下表达我的问题,所以就在这里

import java.util.*;
import java.io.*;
import java.util.Arrays;

public class GazillionSongs {
   public static void main(String[] args) throws FileNotFoundException {
      System.out.println("Hello and welcome to my AP Computer Science Music Sorting Project!"); 
      Scanner kb = new Scanner(System.in);

      System.out.print("Enter the input file: ");
      String in = kb.nextLine();
      Scanner inFile = new Scanner(new File(in));

      System.out.print("Enter sort/filter command: ");
      String command = kb.nextLine();

      System.out.print("Enter an output file: ");
      String out = kb.nextLine();

      File f = new File(out);

      if (f.exists()) {
         System.out.println("Error: output file already exists...");
      } else {
         PrintStream outFile = new PrintStream(new File(out));

         ArrayList<String> lines = new ArrayList<String>();

         while (inFile.hasNextLine()) {
            String line = inFile.nextLine();
            lines.add(line);  
         }

         ArrayList<Song> songs = new ArrayList<Song>();

         Scanner allCommands = new Scanner(command);

         for(int i = 0; i < lines.size(); i++) {
            int year = 0;
            int rank = 0;
            String artist = "";
            String title = "";
            Song song = new Song(year, rank, artist, title);
            song.parse(lines.get(i));
            songs.add(song);
         }

         SongCollection songCollection = new SongCollection(songs);

         while (allCommands.hasNext()) {
            for(int i = 0; i < songs.size(); i++) {
               String command2 = allCommands.next();
               String[] tokens = command2.split(":");
               if (tokens[0].equals("year")) {
                  int min = 0;
                  int max = 0;
                  Range range = new Range(min, max);
                  range.parse(tokens[1]);
                  songCollection.filterYear(range);
               }
               if (tokens[0].equals("rank")) {
                  int min = 0;
                  int max = 0;
                  Range range = new Range(min, max);
                  range.parse(tokens[1]);
                  songCollection.filterRank(range);
               }
               if (tokens[0].equals("artist")) {
                  songCollection.filterArtist(tokens[1]);
               }
               if (tokens[0].equals("title")) {
                  songCollection.filterTitle(tokens[1]);
               }
            }
         }
         outFile.print(songCollection.toString());         
      }
   }                  
}

import java.util.*;
公共类范围{
私用int min;
私人int max;
public int getMin(){
返回最小值;
}
public int getMax(){
返回最大值;
}
公共范围(最小整数、最大整数){
this.min=min;
this.max=max;
}
公共静态范围解析(字符串s){
字符串[]范围=s.split(“-”);
int min=Integer.parseInt(范围[0]);
int max=1;
试一试{
max=Integer.parseInt(范围[1]);
}捕获(阵列索引超出边界异常错误10){
max=Integer.parseInt(范围[0]);
}  
如果(最小值>最大值){
返回新范围(最大值、最小值);
}否则{
返回新范围(最小值、最大值);
}
}
公共布尔包含(int n){
如果(n=min){
返回true;
}否则{
返回false;
}
}
}

import java.util.*;
公营歌曲集{
私有ArrayList歌曲=新建ArrayList();
公共歌曲集(ArrayList歌曲){
这个。歌曲=歌曲;
}
公共ArrayList getList(){
返回歌曲;
}
公共空过滤器耳(范围r){
对于(int i=0;i

为什么我输出信息时文件是空的?

您从未关闭
输出文件。添加
outfile.close()
添加程序的结尾。

或者使用try with resources自动完成,前提是您使用的是Java 7或更高版本。这并没有解决我的问题。你还有其他建议吗?@Jens,呃,那没能解决我的问题。您还有其他建议吗?@KingZuko尝试使用
System.out.println(songCollection.toString())看看你是否得到了任何结果。@Jens没有从中输出任何结果,我一直在试图追踪发生这种情况的原因,但我就是找不到原因。“我不知道如何在不透露所有代码的情况下传达我的问题,”嗯,你认为这首歌与问题有关吗?您可以通过将编写歌曲替换为编写不需要其他类的内容(例如字符串)来确定这一点。
    import java.io.*;
    import java.util.*;

    public class Song {
       private static int year;
       private static int rank;
       private static String artist;
       private static String title;

       public Song(int year, int rank, String artist, String title) {
          this.year = year;
          this.rank = rank;
          this.artist = artist;
          this.title = title;
       }

       public static Song parse(String s) {
          String[] tokens = s.split("\t");
          year = Integer.parseInt(tokens[0]);
          rank = Integer.parseInt(tokens[1]);
          artist = tokens[2];
          title = tokens[3];
          Song song = new Song(year, rank, artist, title);
          return song;
       }

       public int getYear() {
          return this.year;
       }

       public int getRank() {
          return this.rank;
       }

       public String getArtist() {
          return this.artist;
       }

       public String getTitle() {
          return this.title;
       }

       public String toString() {
          String convertString = year + "/t" + rank + "/t" + artist + "/t" + title;
          return convertString;
       }     
    }
import java.util.*;

public class Range {
   private int min;
   private int max;

   public int getMin() { 
      return min; 
   }
   public int getMax() { 
      return max; 
   }

   public Range(int  min, int max) {
      this.min = min;
      this.max = max;
   }

   public static Range parse(String s) {
      String[] range = s.split("-");
      int min = Integer.parseInt(range[0]);
      int max = 1;

      try {
         max = Integer.parseInt(range[1]);
      } catch(ArrayIndexOutOfBoundsException err10) {
         max = Integer.parseInt(range[0]);
      }  

      if(min > max){
         return new Range(max,min);   
      } else {
         return new Range(min,max);
      }
   }

   public boolean contains(int n) {
      if(n <= max && n >= min) {
         return true;
      } else {
         return false;
      }
   }
}
import java.util.*;

public class SongCollection {

   private ArrayList<Song> songs = new ArrayList<Song>();

   public SongCollection(ArrayList<Song> songs) {
      this.songs = songs;
   }

   public ArrayList<Song> getList() {
      return songs;
   }

   public void filterYear(Range r) {
      for(int i = 0; i < songs.size(); i++) {
         if(!r.contains(songs.get(i).getYear())) {
            songs.remove(i);
            i--;
         }
      }
   }

   public void filterRank(Range r) {
      for(int i = 0; i < songs.size(); i++) {
         if(!r.contains(songs.get(i).getRank())) {
            songs.remove(i);
            i--;
         }
      }
   }

   public void filterArtist(String s) {
      for(int i = 0; i < songs.size(); i++) {
         if(!songs.get(i).getArtist().toLowerCase().contains(s.toLowerCase())) {
            songs.remove(i);
            i--;
         }
      }
   }

   public void filterTitle(String s) {
      for(int i = 0; i < songs.size(); i++) {
         if(!songs.get(i).getTitle().toLowerCase().contains(s.toLowerCase())) {
            songs.remove(i);
            i--;
         }
      }
   }

   public void sortYear() {
      for(int i = 1; i <= songs.size(); i++) {
         Song temp = songs.get(i);
         int j;
         for (j = i - 1; j >= 0 && temp.getYear() < songs.get(j).getYear(); j--) {
            songs.set((j + 1), songs.get(j));
            songs.set((j), temp);
         }
      }
   }

   public void sortRank() {
      for(int i = 1; i <= songs.size(); i++) {
         Song temp = songs.get(i);
         int j;
         for (j = i - 1; j >= 0 && temp.getRank() < songs.get(j).getRank(); j--) {
            songs.set((j + 1), songs.get(j));
            songs.set((j), temp);
         }
      }
   }

   public void sortTitle() {
      for(int i = 1; i <= songs.size(); i++) {
         Song temp = songs.get(i);
         int j;
         for (j = i - 1; j >= 0 && temp.getTitle().toLowerCase().compareTo(songs.get(j).getTitle().toLowerCase()) < 0; j--) {
            songs.set((j + 1), songs.get(j));
            songs.set((j), temp);
         }
      }
   }

   public void sortArtist() {
      for(int i = 1; i <= songs.size(); i++) {
         Song temp = songs.get(i);
         int j;
         for (j = i - 1; j >= 0 && temp.getArtist().toLowerCase().compareTo(songs.get(j).getArtist().toLowerCase()) < 0; j--) {
            songs.set((j + 1), songs.get(j));
            songs.set((j), temp);
         }
      }
   }

   public String toString() {
      String stringOfSong = "";
      for(int i = 0; i < songs.size(); i++) {
         stringOfSong += songs.get(i).toString() + "\n";
      }
      return stringOfSong;
   }
}