Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / RandomAccessFile / 25 сообщений из 28, страница 1 из 2
13.08.2018, 06:56
    #39686652
nastyaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RandomAccessFile
Приветики) у меня есть допустим матрица ее нужно записать в тхт и от туда прочитать ( для того чтобы хранить ячейки матрицы) Он использует курсор с помощью которого мы можем переместить указатель файла в определенную позицию.

Ребята я правильно сделала?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
private static void writeData(String filePath, String data, int seek) throws IOException {
       
        RandomAccessFile file = new RandomAccessFile(filePath, "rw");
        
        file.seek(seek);
        // запишем данные в этом месте
        file.write(data.getBytes());
        file.close();
    }
 
    // метод для чтения с файла
    private static byte[] readCharsFromFile(String filePath, int seek, int chars) throws IOException {
        
        RandomAccessFile file = new RandomAccessFile(filePath, "r");
        file.seek(seek);
        byte[] bytes = new byte[chars];
        file.read(bytes);
        file.close();
        return bytes;
    }
 
}
...
Рейтинг: 0 / 0
13.08.2018, 07:40
    #39686660
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RandomAccessFile
nastyaa,

Был уже пример с RandomAccessFile.

21636384

С уважением, Валентин
...
Рейтинг: 0 / 0
13.08.2018, 07:43
    #39686661
nastyaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RandomAccessFile
Valentin Kolesnikov,
Спасибо вам)
но мне нужно с нуля в классе MatrixF создать RandomAccessFile и с помощью seel(int pos) записать и читать то что в файле плюс использовать курсор с помощью которого мы можем переместить указатель файла в определенную позицию. Можете помочь реализовать
...
Рейтинг: 0 / 0
13.08.2018, 07:58
    #39686666
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RandomAccessFile
nastyaaValentin Kolesnikov,
Спасибо вам)
но мне нужно с нуля в классе MatrixF создать RandomAccessFile и с помощью seel(int pos) записать и читать то что в файле плюс использовать курсор с помощью которого мы можем переместить указатель файла в определенную позицию. Можете помочь реализовать

Вот такое решение:

Код: 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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
package matrix;

import java.io.Closeable;
import java.io.IOException;
import java.io.RandomAccessFile;

public class RandomAccessFileMatrix extends Matrix implements Closeable {
    private final RandomAccessFile raf;
    private final int rowCount;
    private final int colCount;

    public RandomAccessFileMatrix(String filename, int row, int col) throws IOException {
        this.raf = new RandomAccessFile(filename, "rw");
        this.rowCount = row;
        this.colCount = col;
    }

    protected long position(int x, int y) {
        return (long) y * rowCount + x;
    }

    public int getRowCount() {
        return rowCount;
    }

    public int getColCount() {
        return colCount;
    }

    public int get(int i, int j) throws MatrixIndexException {
        if (i < 1 || i > rowCount) {  
            throw new MatrixIndexException("Недопустимое число строк: " + i);
        }
        if (j < 1 || j > colCount) {
            throw new MatrixIndexException("Недопустимое число столбцов: " + j);
        }
        long p = position(i - 1, j - 1) * 8;
        try {
            raf.seek(p);
            return raf.readInt();
        } catch (IOException ex) {
            throw new RuntimeException(ex);
        }
    }

    public void put(int i, int j, int value) throws MatrixIndexException {
        if (i < 1 || i > rowCount) {
            throw new MatrixIndexException("Недопустимое число строк: " + i);
        }
        if (j < 1 || j > colCount) {
            throw new MatrixIndexException("Недопустимое число столбцов: " + j);
        }
        long p = position(i - 1, j - 1) * 8;
        try {
            raf.seek(p);
            raf.writeInt(value);
        } catch (IOException ex) {
            throw new RuntimeException(ex);
        }
    }

    public void close() throws IOException {
        raf.close();
    }
}



С уважением, Валентин
...
Рейтинг: 0 / 0
13.08.2018, 08:03
    #39686667
nastyaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RandomAccessFile
Valentin Kolesnikov,

Спасибо вам!!!)
...
Рейтинг: 0 / 0
13.08.2018, 08:04
    #39686668
nastyaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RandomAccessFile
Valentin Kolesnikov,
не подскажите что здесь делается?
Код: java
1.
2.
3.
4.
5.
6.
7.
 long p = position(i - 1, j - 1) * 8;
        try {
            raf.seek(p);
            raf.writeInt(value);
        } catch (IOException ex) {
            throw new RuntimeException(ex);
        }
...
Рейтинг: 0 / 0
13.08.2018, 08:17
    #39686670
nastyaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RandomAccessFile
Valentin Kolesnikov,

как его запустить через main?
...
Рейтинг: 0 / 0
13.08.2018, 08:26
    #39686671
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RandomAccessFile
nastyaaValentin Kolesnikov,
не подскажите что здесь делается?
Код: java
1.
2.
3.
4.
5.
6.
7.
 long p = position(i - 1, j - 1) * 8;
        try {
            raf.seek(p);
            raf.writeInt(value);
        } catch (IOException ex) {
            throw new RuntimeException(ex);
        }



В этом коде записывается целое число в файл. IOException заворачивается внутрь RuntimeException.

С уважением, Валентин
...
Рейтинг: 0 / 0
13.08.2018, 08:28
    #39686672
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RandomAccessFile
nastyaaValentin Kolesnikov,

как его запустить через main?

В main нужно создать класс RandomAccessFileMatrix.
И вызывать для него put/get методы.

С уважением, Валентин
...
Рейтинг: 0 / 0
13.08.2018, 08:41
    #39686675
nastyaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RandomAccessFile
Valentin Kolesnikov,


я на main пишу ошибку выводит( может где то ошибласт
не подскажите как? я проверю где что делала не правильно(
...
Рейтинг: 0 / 0
13.08.2018, 09:41
    #39686692
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RandomAccessFile
nastyaaValentin Kolesnikov,


я на main пишу ошибку выводит( может где то ошибласт
не подскажите как? я проверю где что делала не правильно(

У меня так работает:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
package matrix;

public class Main {

    public static void main(String[] args) throws MatrixIndexException, java.io.IOException {
        Matrix m1 = new RandomAccessFileMatrix("data1.bin", 3, 3);
        Matrix m2 = new RandomAccessFileMatrix("data2.bin", 3, 3);
        
        MatrixUtils.fillByRandom(m1);
        MatrixUtils.fillByRandom(m2);
        
        Matrix m = MatrixUtils.matrixMultiple(m1, m2);
        
        System.out.println(m.toStringOneColumn());
        MatrixUtils.writeMatrixToFile(m, "file.txt");
        Matrix m3 = MatrixUtils.loadMatrixFromFile("file.txt");
        System.out.println(m3.toStringOneColumn());
    }
}



С уважением, Валентин
...
Рейтинг: 0 / 0
13.08.2018, 09:42
    #39686693
nastyaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RandomAccessFile
Valentin Kolesnikov,

там RandomAccessFile запускается?
...
Рейтинг: 0 / 0
13.08.2018, 09:44
    #39686694
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RandomAccessFile
nastyaaValentin Kolesnikov,

там RandomAccessFile запускается?

Да, код для RandomAccessFileMatrix тут: 21639904

С уважением, Валентин
...
Рейтинг: 0 / 0
13.08.2018, 09:46
    #39686695
nastyaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RandomAccessFile
Valentin Kolesnikov,

как его поменять так чтобы в виде матрицы было(
Код: 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.
Matrix:
[ 
2360
2408
1528
2125
1798
1202
838
1365
1050
]
Matrix:
[ 
2360
2408
1528
2125
1798
1202
838
1365
1050
]
...
Рейтинг: 0 / 0
13.08.2018, 09:47
    #39686696
nastyaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RandomAccessFile
Valentin Kolesnikov,

Чтобы я без вас делала) вы мой бог!!!
...
Рейтинг: 0 / 0
13.08.2018, 09:49
    #39686698
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RandomAccessFile
nastyaaValentin Kolesnikov,

как его поменять так чтобы в виде матрицы было(
Код: 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.
Matrix:
[ 
2360
2408
1528
2125
1798
1202
838
1365
1050
]
Matrix:
[ 
2360
2408
1528
2125
1798
1202
838
1365
1050
]



Нужно в main заменить вызовы m.toStringOneColumn() на m.toString().

С уважением, Валентин
...
Рейтинг: 0 / 0
13.08.2018, 09:52
    #39686699
nastyaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RandomAccessFile
Valentin Kolesnikov,

спасибо)))
...
Рейтинг: 0 / 0
13.08.2018, 11:24
    #39686748
nastyaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RandomAccessFile
Valentin Kolesnikov,
Можно спросить почему 8? это из за того что в лонг помещается 8 байтов?

Код: java
1.
2.
3.
4.
5.
6.
7.
long p = position(i - 1, j - 1) * 8;
        try {
            raf.seek(p);
            raf.writeInt(value);
        } catch (IOException ex) {
            throw new RuntimeException(ex);
        }
...
Рейтинг: 0 / 0
13.08.2018, 11:27
    #39686750
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RandomAccessFile
Господа, а мне все таки интересно, у Вас файл TXT или бинарный ?
...
Рейтинг: 0 / 0
13.08.2018, 11:27
    #39686751
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RandomAccessFile
nastyaaValentin Kolesnikov,
Можно спросить почему 8? это из за того что в лонг помещается 8 байтов?

Код: java
1.
2.
3.
4.
5.
6.
7.
long p = position(i - 1, j - 1) * 8;
        try {
            raf.seek(p);
            raf.writeInt(value);
        } catch (IOException ex) {
            throw new RuntimeException(ex);
        }



Можно уменьшить до 4.

авторint
4 bytes, signed (two's complement). -2,147,483,648 to 2,147,483,647. Like all numeric types ints may be cast into other numeric types (byte, short, long, float, double). When lossy casts are done (e.g. int to byte) the conversion is done modulo the length of the smaller type.


http://www.cafeaulait.org/course/week2/02.html

С уважением, Валентин
...
Рейтинг: 0 / 0
13.08.2018, 11:29
    #39686753
nastyaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RandomAccessFile
Valentin Kolesnikov,

Спасибо))))
...
Рейтинг: 0 / 0
13.08.2018, 13:47
    #39686865
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RandomAccessFile
Leonid KudryavtsevГоспода, а мне все таки интересно, у Вас файл TXT или бинарный ?

Бинарный файл.

С уважением, Валентин
...
Рейтинг: 0 / 0
14.08.2018, 11:10
    #39687340
nastyaa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RandomAccessFile
Valentin Kolesnikov,
здрасвуйте можете пожалуйста помочь
http://www.sql.ru/forum/1300916/struktura-dannyh
...
Рейтинг: 0 / 0
19.08.2018, 09:09
    #39689886
unregestered
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RandomAccessFile
Учтите что RandomAccessFile не буферизованная штука.
А можно поинтересоваться с какой целью это используется?
...
Рейтинг: 0 / 0
19.08.2018, 09:11
    #39689887
unregestered
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
RandomAccessFile
Какая задача стоит?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / RandomAccessFile / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]