Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.79/47: Рейтинг темы: голосов - 47, средняя оценка - 4.79
Tajoda
0 / 0 / 0
Регистрация: 13.04.2012
Сообщений: 21
1

Чтение данных из файла в массив

22.04.2012, 23:01. Просмотров 9014. Ответов 11
Метки нет (Все метки)

задачка такая: дан файл f, где целые числа, нет нулей, причем количество отрицательных равно количеству положительных. Нужно переписать компоненты файла f в g так, чтобы в файле g не было двух соседних чисел с одним знаком.
Думаю алгоритм такой: записать из f в массив, затем создать новый массив с заданным условием, а затем его записать в файл g.
Подскажите, пожалуйста, как мне из файла f записать в массив? Какие команды нужно использовать?

Добавлено через 1 час 26 минут
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package sem1zadachka;
import java.io.*;
import java.util.*;
 
/**
 *
 * @author Студент
 */
public class fghfiles {
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException{
        // TODO code application logic
        int a[];
        try { // чтение данных из файла
           FileInputStream is = new FileInputStream("f.txt");
           DataInputStream ids = new DataInputStream(is);
           int tempi = ids.readInt();
           ids.close();
        } catch (IOException e){System.out.println("ошибка " + e); }
 
    }
 
}
вроде что-то делаю, но не выходит...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2012, 23:01
Ответы с готовыми решениями:

Чтение из текстового файла строковых данных в двумерный массив java8
Собственно как это сделать? Scanner использовать или reader или что?...

Чтение текстового файла. Парсинг его данных. Создание исключений для данных. Запись свойств объектов в файл
Проблема такая. Есть файл data.txt. В нем например какие-то данные. Landon...

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

Чтение из файла в массив
Здравствуйте! Есть файл такого содержания: Нужно его прочесть так чтобы было...

Чтение из файла в массив
ДОбрый день, подскажите пожалуйста как из .txt файла в котором куча всего ...

11
exiqa
486 / 332 / 71
Регистрация: 24.12.2011
Сообщений: 591
22.04.2012, 23:08 2
DataInputStream это байтовый поток, он Вам не подойдет. Можете воспользоваться например Scanner'ом.

Java
1
Scanner scanner = new Scanner(new File("input.txt"));
и его методом nextInt()
1
Tajoda
0 / 0 / 0
Регистрация: 13.04.2012
Сообщений: 21
22.04.2012, 23:27  [ТС] 3
эх.. сканеры не проходили, но попробую, может что и выйдет) спасибо!

Добавлено через 17 минут
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package sem1zadachka;
import java.io.*;
import java.util.*;
 
/**
 *
 * @author Студент
 */
public class fghfiles {
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException{
        // TODO code application logic
        int a[]={20};
        try {
           Scanner scanner = new Scanner(new File("f.txt"));
            while (scanner.hasNextLine()) {
                int i = scanner.nextInt();
                for(int k=0; k<a.length; k++){
                   k=scanner.nextInt();
                }
                System.out.println("числа: " + i);
                
            }
        } catch (IOException e){System.out.println("ошибка " + e); }
 
    }
 
}
вроде чтение работает, а как цикл for добавил, так ошибки пошли...
0
exiqa
486 / 332 / 71
Регистрация: 24.12.2011
Сообщений: 591
22.04.2012, 23:44 4
вот
Java
1
2
3
4
5
6
7
8
9
int i;
while (sc.hasNextInt()) {
    i = sc.nextInt();
    /*
    * тут делаем что нибудь с i, напрмер добавляем в массив.
    * другая проблема в том, что размер массива задается
    * при создании, а кол-во чисел в файле неизвестно
    */
}
0
Zav
8 / 8 / 1
Регистрация: 19.04.2012
Сообщений: 26
23.04.2012, 09:31 5
Tajoda, а как выглядит файл? Какие разделители между числами?
Ошибки в цикле for, скорее всего, как раз из-за того, как написал exiqa, что Вы не знаете длину массива. А в строке 16 Вы создаете массив длиной 1. В цикле for у Вас получается выполнять цикл от нуля до нуля.
Если не знаем какого размера будет массив - два варианта:
1. Два раза проходимся сканнером: первый - инкрементим счетчик-длину массива, в конце цикла узнаем длину массива, потом создаем массив фикированный массив найденной длины; второй раз проходимся сканером заново, записывая в массив.
2. Используем коллекции, если Вы их проходили. Коллекция сама "расширяет" массив. Массив - псевдодинамический.
0
Tajoda
0 / 0 / 0
Регистрация: 13.04.2012
Сообщений: 21
23.04.2012, 15:54  [ТС] 6
файл примерно такой: 1 -1 2 2 2 2 -2 -2 -2 3 -5 -5
все же со сканером у меня не выходит, попробую создать все же вспомогательный файл h, туда занесу только отрицательные числа, а затем в файле f буду искать только положительные числа, и как только встречу положительное число, запишу его в файл g и одновременно с ним запишу один элемент из файла h(где только отрицательные). Думаю, если разбить через токинайзер, может что и выйдет)
0
exiqa
486 / 332 / 71
Регистрация: 24.12.2011
Сообщений: 591
23.04.2012, 16:05 7
первое что пришло на ум

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class Test {
    
    public static void main(String[] args) throws IOException {
        
        Scanner sc = new Scanner(new File("in.txt"));
        PrintWriter pw = new PrintWriter(new File("out.txt"));
        Deque<Integer> deq = new LinkedList<Integer>();
        
        int i;
        while (sc.hasNextInt()) {
            i = sc.nextInt();
            if (i < 0) {
                deq.addFirst(i);
            } else {
                deq.addLast(i);
            }
        }
        
        while (deq.size() != 0) {
            pw.print(deq.removeFirst());
            pw.print(" ");
            pw.print(deq.removeLast());
            pw.print(" ");
        }
        
        pw.close();
        sc.close();
    }
 
}
1
Tajoda
0 / 0 / 0
Регистрация: 13.04.2012
Сообщений: 21
23.04.2012, 16:54  [ТС] 8
да, прога работает. но я не все понимаю - строчки 7, 20, 22. Попробую другим способом, но все-равно спасибо!
0
Tajoda
0 / 0 / 0
Регистрация: 13.04.2012
Сообщений: 21
24.04.2012, 17:43  [ТС] 9
хочу сделать эту же задачку, но только при условии, что буду использовать вспомогательный файл h, я хочу прочесть из файла f символы, и записать только отрицательные числа в файл h. сделал вот так, но он почему-то не находит файла..
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package zadachka;
import java.io.*;
import java.util.*;
 
/**
 *
 * @author Студент
 */
public class Main {
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        int b;
        String s;
        try {
               FileInputStream is = new FileInputStream("f.txt");
               DataInputStream ids = new DataInputStream(is);
                 RandomAccessFile rh = new RandomAccessFile("h.txt", "rw");
                    while (ids.available() !=0){
                       b=ids.readInt();
                       if( b<0) {rh.writeInt(b);}
                    }
              ids.close();
        }catch (IOException e){System.out.println("ошибка файла: " + e);}
    }
 
}
0
exiqa
486 / 332 / 71
Регистрация: 24.12.2011
Сообщений: 591
24.04.2012, 18:14 10
еще раз
Цитата Сообщение от exiqa Посмотреть сообщение
DataInputStream это байтовый поток, он Вам не подойдет.
0
Tajoda
0 / 0 / 0
Регистрация: 13.04.2012
Сообщений: 21
24.04.2012, 18:19  [ТС] 11
да, я знаю, но я хотел именно с байтами сделать, а если через split() попробовать разбить, он будет с байтами работать?
0
exiqa
486 / 332 / 71
Регистрация: 24.12.2011
Сообщений: 591
24.04.2012, 21:25 12
Вы все равно не поняли. Проведите небольшой эксперимент


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public class TestingDataOutputStream {
 
    public static void main(String[] args) throws IOException {
        
        DataOutputStream out = new DataOutputStream(new FileOutputStream("test.txt"));
        for (int i = 0; i < 5; i++) {
            out.writeInt(i);
        }
        out.close();
        
    }
 
}
потом откройте этот файл и посмотрите. А потом почитайте, как работает метод readInt()
0
24.04.2012, 21:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2012, 21:25

Чтение данных из файла
пытаюсь прочитать из файла значения, посчитать среднеарифметическое и вывести...

Чтение данных из файла
У меня программа должна читать данные из файла, производить вычисление среднего...

Чтение из файла и запись в массив
Здравствуйте! Проблема такая ... не работает программа скорее всего потому что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru