2015-01-16 2 views
0

Явно новичок в программировании на Java и недавно создал приложение, которое вводит пользователя от названия фильма, книги или песни (от радиокнопки) и печатает его в текстовый файл как это:Сортировка файлов - типы элементов - Java

Movie Title: The Imitation Game Date & Time: 01/15/2015 08:52:39 
Music Title: Fly For Your Life Artist: Gunship Date & Time: 01/15/2015 08:52:51 
Book Title: Alan Turing: The Enigma Date & Time: 01/15/2015 08:53:05M 
Music Title: Adagio For Tron Artist: Daft Punk Date & Time: 01/15/2015 08:54:06 
Music Title: Bad Wings Artist: The Glitch Mob Date & Time: 01/15/2015 08:54:13 
Movie Title: Rear Window Date & Time: 01/15/2015 08:54:28 

Итак, что я спрашиваю, как мне сортировать по Фильмы, музыка или книги в текстовом файле?

Я хочу иметь возможность, когда программа заканчивается (я использую JFrame и JPanel для пользовательского интерфейса), она сортирует фильмы, затем музыку, затем книги в список.

Я бы хотел не только получить фактический ответ на образец кода, но и учебник о том, что он делает и как он работает.

+0

У меня есть опыт с этим, ничего профессионального или обширного. Было бы проще просто сохранить их для разделения файлов? – Kalkrin

+0

Начать с [Trail: Collections] (http://docs.oracle.com/javase/tutorial/collections/) и ['Collections'] (http://docs.oracle.com/javase/7/docs/api /java/util/Collections.html), найдите методы 'sort' и [' Comparator'] (http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html) – MadProgrammer

ответ

0

Ну, вы можете создать 3 разных класса, один для фильмов, один для книг и один для песен.

public class Movies throws Exception { 
String title; 
Date date; 
public Movie(String title, Date date){ 
this.title = title; 
this.date = date; 
} 

public class Book throws Exception { 
String title; 
String author; 
Date date; 
public Book(String title,String author, Date date){ //constructor of Book 
this.title = title; 
this.author = author; 
this.date = date; 
} 

И песня такая же, как и книга.

Когда вы в реальном времени выполняете приложение, вы можете печатать вещи по мере их поступления (как и в вашем примере), но в то же время зарегистрируйте их в связанныхLists или собственных массивах (Movie []] варисторы, Книга бок [] и т.д.):

Movie mov[] = new Movie[2000]; 
int n = 0; 
//the app begins 
System.out.println(INFOMovie) //this is the method you use to print the information of a movie(supposed thing) 
mov[n] = INFOMovie.title ,INFOMovie.date); 
//and so on 

и когда приложение заканчивается, перед выходом, сделать метод сортировки, который первым читает все фильмы, то книги, а затем песни, и сделать их на JPanel в том порядке, в котором вы хотите. Что-то вроде этого: int n = 0;

while(n!= mov.length){ 
System.out.println(mov[n].toString); //the toString method is a method you can have in your classes where you make a string with all the info you want to have about that class (this time, the movie one). 
} 
n=0; 
while(n!=bok.length){ 
System.out.println(mov[n].toString); 
} 

и так далее.

Я думаю, что я понял, что у вас есть проблема, если я этого не сделаю, сообщите мне об этом. Я изменю свой ответ, чтобы он соответствовал вашему вопросу. Кроме того, если вы не знаете какой-либо части моего ответа, скажите это, и я объясню это лучше.

Кроме того, что сделал MadProgrammer, очень хорошо. Если у вас есть вопросы, задайте вопрос.

2

Итак, что я спрашиваю, как я могу сортировать фильмы, музыку или книги в текстовом файле?

По существу, вы этого не сделаете. Вы загружаете значения в память, сортируете их и сохраняете обратно в файл.

List<String> values = new ArrayList<String>(25); 
values.add("Movie Title: The Imitation Game Date & Time: 01/15/2015 08:52:39"); 
values.add("Music Title: Fly For Your Life Artist: Gunship Date & Time: 01/15/2015 08:52:51)"); 
values.add("Book Title: Alan Turing: The Enigma Date & Time: 01/15/2015 08:53:05M"); 
values.add("Music Title: Adagio For Tron Artist: Daft Punk Date & Time: 01/15/2015 08:54:06"); 
values.add("Music Title: Bad Wings Artist: The Glitch Mob Date & Time: 01/15/2015 08:54:13"); 
values.add("Movie Title: Rear Window Date & Time: 01/15/2015 08:54:28");  

Collections.sort(values, new Comparator<String>() { 
    @Override 
    public int compare(String o1, String o2) { 
     String t1 = o1.substring(0, o1.indexOf(" ")).trim(); 
     String t2 = o2.substring(0, o2.indexOf(" ")).trim(); 
     return t1.compareTo(t2); 
    } 
}); 

for (String value : values) { 
    System.out.println(value); 
} 

Какие выходы ...

Book Title: Alan Turing: The Enigma Date & Time: 01/15/2015 08:53:05M 
Movie Title: The Imitation Game Date & Time: 01/15/2015 08:52:39 
Movie Title: Rear Window Date & Time: 01/15/2015 08:54:28 
Music Title: Fly For Your Life Artist: Gunship Date & Time: 01/15/2015 08:52:51) 
Music Title: Adagio For Tron Artist: Daft Punk Date & Time: 01/15/2015 08:54:06 
Music Title: Bad Wings Artist: The Glitch Mob Date & Time: 01/15/2015 08:54:13 

Это просто использует «естественный» порядок String с для сортировки элементов по, если вы хотите что-то более сложным, вы должны были бы написать правила для этого в compare способе Comparator

посмотрите на Collections, искать sort методы и Comparator для получения более подробной информации

Вы могли бы ...

Держите каждого типа в пределах его собственной List и сохранять их последовательно или в там собственный файл ...

Вы могли бы ...

Используйте Map из какой-то, чтобы как предметы сгруппированы вместе ...

Map<String, List<String>> mapItems = new HashMap<>(); 
map.put("Music", new ArrayList<String>(25)); 

map.get("Music").add("The Imitation Game Date & Time: 01/15/2015 08:52:39"); 
//... 

Посмотрите на Trail: Collections для получения более подробной информации.

Вы могли бы ...

стиснуть зубы и попробовать свои силы в использовании базы данных некоторого вида, существует ряд простых, одного пользователя, базы данных доступны, H2, например, который является чистой Java база данных. Посмотрите на JDBC Database Access для получения более подробной информации ...

Независимо от того, я хотел бы предложить вам создать базовый класс или интерфейс, которые поддерживают основную информацию (название и временную метку от внешнего вида), а затем создают классы специальности, например Music/Book/Movie, который простирается от него. Это облегчит управление в долгосрочной перспективе, поскольку информация поддерживается в рамках концепции собственного типа контейнера (и позволяет специализироваться на каждом типе)

Смежные вопросы