Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4 5   вперед  Ctrl      все
 Почему у меня не выводит в txt файл  [new]
nastyaa
Member

Откуда:
Сообщений: 332
public static void writeMatrixToFile(Matrix m, String filename) {

        try (FileWriter writer = new FileWriter(filename, false)) {
            String strForWrite = "";

            for (int i = 1; i < m.getRowCount(); i++) {
                for (int j = 1; j < m.getColCount(); j++) {
                    strForWrite += m.get(i, j) + " ";
                }
                strForWrite += "\n";
            }

            writer.write(strForWrite);
            writer.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (MatrixIndexException e) {
            e.printStackTrace();
        }
    }

    public static Matrix loadMatrixFromFile(Matrix m, String filename) {

        try (FileWriter writer = new FileWriter(filename, false)) {
            String strForWrite = "";

            writer.write(String.valueOf(m.getRowCount()));
            writer.write("\n");
            writer.write(String.valueOf(m.getColCount()));
            writer.write("\n");

            for (int i = 1; i < m.getRowCount(); i++) {
                for (int j = 1; j < m.getColCount(); j++) {
                    strForWrite += m.get(i, j) + " ";
                }
                strForWrite += "\n";
            }

            writer.write(strForWrite);
            writer.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (MatrixIndexException e) {
            e.printStackTrace();
        } catch (Exception e) {
        }
    }
8 авг 18, 14:07    [21634398]     Ответить | Цитировать Сообщить модератору
 Re: Почему у меня не выводит в txt файл  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 7129
что значит "не выводит" ?
почему-то не увидел close() файлов (вместо него зачем-то впихнут flush)
8 авг 18, 15:04    [21634506]     Ответить | Цитировать Сообщить модератору
 Re: Почему у меня не выводит в txt файл  [new]
Kachalov
Member

Откуда: Москва
Сообщений: 5471
Leonid Kudryavtsev
почему-то не увидел close() файлов (вместо него зачем-то впихнут flush)

AutoCloseable, а flush действительно избыточен
8 авг 18, 15:12    [21634528]     Ответить | Цитировать Сообщить модератору
 Re: Почему у меня не выводит в txt файл  [new]
Valery Shiskin
Member

Откуда:
Сообщений: 785
nastyaa,

То бишь, пытаемся записать файл и его же загрузить , используя FileWriter ?
8 авг 18, 16:28    [21634659]     Ответить | Цитировать Сообщить модератору
 Re: Почему у меня не выводит в txt файл  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 7129
nastyaa
String strForWrite = "";
...
strForWrite += m.get(i, j) + " ";
...
strForWrite += "\n";

Не очень хорошее использование класса String. Точнее - плохое.

Надо использовать StringBuilder или StringBuffer (если требуется многопотоковость)

IMHO
8 авг 18, 16:40    [21634676]     Ответить | Цитировать Сообщить модератору
 Re: Почему у меня не выводит в txt файл  [new]
mayton
Member

Откуда: loopback
Сообщений: 37867
Тут просто нужно объявлять срочный ликбез. Девочка (или не девочка) nastyaa,
смешала write и read. Похоже она (он) не понимает в чем здесь разница и какие
роли и ответственности нужны для этих двух методов.

Непонятно также как на верхнем уровне обработается Exception (который вообще
никак не обработается). В трубу всё улетает...

Вобщем Настя... Умеешь ты деморализовать.

Ожидаю активные вопросы и огонь понимания в глазах. Без этого дальнейший
рефакторинг будет безсмысленный.
8 авг 18, 21:35    [21635021]     Ответить | Цитировать Сообщить модератору
 Re: Почему у меня не выводит в txt файл  [new]
nastyaa
Member

Откуда:
Сообщений: 332
Leonid Kudryavtsev,

можете исправить мою ошибку плиз(
9 авг 18, 06:10    [21635263]     Ответить | Цитировать Сообщить модератору
 Re: Почему у меня не выводит в txt файл  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 14625
nastyaa,
вывести простую строку в файл пробовала?
пошаговая отладка знакома?
9 авг 18, 09:18    [21635391]     Ответить | Цитировать Сообщить модератору
 Re: Почему у меня не выводит в txt файл  [new]
nastyaa
Member

Откуда:
Сообщений: 332
вадя, я только учусь программировать

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

package matrix;

import java.util.LinkedList;
import java.util.List;

public class Main extends Exception {

    public static void main(String[] args) throws MatrixIndexException {

        Matrix2D mA = new Matrix2D(100, 100);
        
        MatrixUtils.fillByRandom(mA);
        
        MatrixUtils.writeMatrixToFile(mA, "C://Data//1.txt");
        
        System.out.println(mA.toString());


вот мой код
 public static void writeMatrixToFile(Matrix m, String filename) {


        try(FileWriter writer = new FileWriter(filename, false)){
            String strForWrite = "";
            
            writer.write(String.valueOf(m.getRowCount()));
            writer.write("\n");
            writer.write(String.valueOf(m.getColCount()));
            writer.write("\n");

            for (int i = 1; i < m.getRowCount(); i++){
                for (int j = 1; j < m.getColCount(); j++){
                    
                    strForWrite += m.get(i,j) + " ";
                }
                strForWrite += "\n";
            }

            writer.write(strForWrite);
            writer.flush();
        }catch (IOException e){
            e.printStackTrace();
        }catch(MatrixIndexException e){
             e.printStackTrace();
        }
    }

    public Matrix loadMatrixFromFile(String filename){
        try(FileReader reader = new FileReader(filename)){
            String strFromFile = "";

            while (reader.ready()){
                strFromFile += (char)reader.read();
            }

            String[] arr = strFromFile.split(" |\n");
            Matrix result = new Matrix(Integer.valueOf(arr[0]),Integer.valueOf(arr[1]));

            int row = 0;
            int col = 0;

            for (int i = 2; i < arr.length; i++){
                if (!arr[i].equals("")){
                    result.put(row, col) = Integer.valueOf(arr[i]);
                    col++;
                    if (col == result.getColCount()){
                        col = 0;
                        row++;
                    }
                }
            }

            return result;
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
}
9 авг 18, 09:26    [21635401]     Ответить | Цитировать Сообщить модератору
 Re: Почему у меня не выводит в txt файл  [new]
SQL2008
Member

Откуда:
Сообщений: 3599
nastyaa
Leonid Kudryavtsev,

можете исправить мою ошибку плиз(


Примерно так.
Заменить код
            String strForWrite = "";

            for (int i = 1; i < m.getRowCount(); i++) {
                for (int j = 1; j < m.getColCount(); j++) {
                    strForWrite += m.get(i, j) + " ";
                }
                strForWrite += "\n";
            }

		writer.write(strForWrite);
            	writer.flush();


на
            StringBuilder sbForWrite = new StringBuilder();

            for (int i = 0; i < m.getRowCount(); i++) {
                for (int j = 0; j < m.getColCount(); j++) {
		    sbForWrite.Add(m.get(i, j).toString());
		    sbForWrite.Add(" "); 
                }
                sbForWrite.Add("\n");
            }

		writer.write(sbForWrite.toString());
            	writer.close();


Предпочитаю явно закрывать файлы.
9 авг 18, 09:27    [21635402]     Ответить | Цитировать Сообщить модератору
 Re: Почему у меня не выводит в txt файл  [new]
nastyaa
Member

Откуда:
Сообщений: 332
вадя,
cначала 100 на 100 потом рандомные цифры пошли
100
100
1 24 44 22 36 24 2 23 12 26 16 22 7 3 10 47 47 20 7 47 7 30 18 23 7 28 30 31 14 13 32 32 22 46 3 7 31 6 1 1 15 12 48 10 30 7 24 13 40 18 41 22 47 2 36 20 28 27 34 8 49 2 19 28 27 46 4 15 27 22 3 1 32 0 9 32 8 42 43 42 3 39 23 15 48 33 27 45 14 31 1 44 40 6 4 15 27 49 44 
1 21 18 23 18 40 26 25 14 27 33 14 5 24 11 24 13 45 22 8 12 16 46 0 17 15 9 48 6 46 8 23 28 29 34 20 44 32 28 4 38 18 23 2 37 34 29 3 48 20 24 41 33 7 0 16 48 4 3 36 25 46 36 3 32 46 17 49 10 29 11 25 29 41 21 48 24 46 4 37 8 48 29 36 16 38 3 44 33 48 5 19 49 15 28 12 25 25 32 
27 20 19 22 34 3 5 8 2 5 30 21 25 19 47 15 31 0 14 31 22 37 12 4 17 29 23 2 6 26 27 9 40 1 39 22 42 42 22 20 6 2 35 4 40 44 27 26 47 36 10 36 8 9 44 14 16 5 19 9 33 28 5 32 35 0 9 27 29 49 44 2 27 4 33 20 4 39 44 49 13 22 1 26 16 19 47 5 20 45 18 48 12 46 46 21 35 12 43 
38 34 19 32 42 34 31 46 39 6 7 38 32 42 8 12 6 5 21 39 18 9 38 6 7 48 26 37 17 30 47 21 41 47 29 44 40 29 20 0 31 48 3 7 37 49 2 27 13 45 2 36 9 15 33 20 22 8 28 29 40 31 22 1 18 27 11 6 0 40 11 45 20 27 21 31 12 22 14 34 15 9 15 24 44 44 29 7 1 32 6 13 31 21 17 2 19 25 49 
46 7 16 11 4 5 18 43 16 9 22 10 41 7 45 11 18 36 28 31 43 15 36 42 33 28 41 17 45 9 17 4 1 29 16 41 40 18 8 23 34 17 21 48 43 25 15 29 35 49 20 11 0 7 18 33 49 49 44 35 12 19 14 42 34 1 38 42 18 6 49 34 17 33 2 2 4 15 35 21 0 37 3 19 26 26 34 32 35 45 7 19 33 20 18 28 43 17 4 
24 9 44 40 22 1 21 7 39 16 15 20 37 9 43 36 17 26 33 26 48 7 43 6 38 18 33 28 34 21 33 43 28 9 3 8 37 25 25 9 8 35 43 12 2 48 18 23 45 15 26 3 5 3 10 37 3 39 32 22 40 18 48 43 9 14 5 40 35 18 22 49 7 3 20 48 49 19 38 19 39 7 25 3 24 47 37 39 25 48 21 29 35 9 4 38 15 32 30 
27 47 11 15 31 39 37 26 8 28 33 46 19 1 26 22 34 0 17 11 3 42 36 39 32 13 25 9 44 15 40 35 26 8 46 48 38 10 21 41 0 25 7 31 3 45 37 46 35 6 46 6 7 39 4 41 26 24 25 21 22 13 24 4 37 2 9 18 30 18 46 49 33 11 31 13 31 43 8 5 44 46 39 9 30 21 5 18 39 4 28 21 47 1 5 0 17 3 30 
11 48 16 25 26 31 49 37 19 28 4 47 19 19 13 19 41 45 39 12 40 4 37 2 40 45 46 23 17 49 10 6 25 4 3 29 46 22 41 0 19 25 17 24 20 21 5 25 42 49 28 32 11 27 26 22 42 18 18 7 33 2 36 5 2 36 11 27 15 2 36 33 12 22 41 20 10 23 33 33 30 23 3 29 16 21 47 18 31 38 42 30 44 16 5 24 25 11 37 
36 25 41 27 10 33 29 19 39 5 45 32 47 30 9 43 48 13 13 32 40 49 13 20 7 31 39 40 2 43 26 21 17 48 9 49 33 14 3 25 4 44 49 38 6 37 37 38 20 17 43 3 32 44 3 29 44 27 47 16 1 33 2 15 2 30 42 8 4 30 2 26 13 3 38 46 31 2 49 8 12 37 28 31 41 27 16 4 32 38 4 9 8 1 13 15 7 5 49 
20 24 40 2 22 30 46 8 38 13 8 13 31 45 12 37 2 45 5 21 38 48 8 26 39 7 31 19 10 17 29 13 25 36 1 27 5 43 37 5 34 47 49 28 46 5 42 41 7 38 37 33 47 36 3 47 13 18 36 15 30 39 40 7 28 14 29 20 19 1 42 14 39 14 26 42 36 19 43 31 5 44 32 18 48 46 30 11 14 29 45 39 45 4 21 2 21 39 22 
42 37 26 18 45 23 43 17 2 20 49 46 23 22 3 35 12 19 11 2 20 10 18 41 26 10 3 40 24 39 13 25 17 25 38 30 40 11 38 28 47 35 11 3 28 33 5 46 16 0 4 15 45 9 29 20 2 10 28 10 48 6 5 37 5 44 17 3 12 5 33 28 25 1 22 47 4 39 41 30 14 37 11 12 7 45 47 14 6 47 11 0 37 18 0 29 39 32 49 
33 4 17 47 13 42 9 37 40 12 31 30 25 32 44 10 36 4 28 18 
9 авг 18, 09:28    [21635403]     Ответить | Цитировать Сообщить модератору
 Re: Почему у меня не выводит в txt файл  [new]
nastyaa
Member

Откуда:
Сообщений: 332
SQL2008,

ошибка

К сообщению приложен файл. Размер - 148Kb
9 авг 18, 09:31    [21635407]     Ответить | Цитировать Сообщить модератору
 Re: Почему у меня не выводит в txt файл  [new]
nastyaa
Member

Откуда:
Сообщений: 332
SQL2008,

вот ошибка

К сообщению приложен файл. Размер - 140Kb
9 авг 18, 09:32    [21635409]     Ответить | Цитировать Сообщить модератору
 Re: Почему у меня не выводит в txt файл  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 14625
nastyaa,

дак вопрос в чём?
не красиво выводит в файл?
или вообще не выводит в файл?
судя по тому что скрин из файла есть - значит в файл выводит.
ну а красивый вывод - это уже дело вкуса.
тут надо просто подумать - это не проблема, чтоб паниковать.
9 авг 18, 09:53    [21635434]     Ответить | Цитировать Сообщить модератору
 Re: Почему у меня не выводит в txt файл  [new]
nastyaa
Member

Откуда:
Сообщений: 332
вадя,

мне просто задание дали что четко выводило по колонам и столбцам и чтобы программа записывала в файл, и потом можно было с файла записывать в программу( можете пожауйлста помочь я двое суток не могу решить кто на этом форуме для меня как последняя надежда
9 авг 18, 09:58    [21635442]     Ответить | Цитировать Сообщить модератору
 Re: Почему у меня не выводит в txt файл  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 14625
nastyaa,

дак в чем проблема?
сделать два цикла - и всё будет работать красиво.
какая максимальная разрядность выводимых чисел?
использовать форматирование числа при выводе чтоб дополняло до максимальной разрядности пробелами +2пробела и будет выводиться красивыми столбиками с двумя пробелами между ними.
9 авг 18, 10:23    [21635499]     Ответить | Цитировать Сообщить модератору
 Re: Почему у меня не выводит в txt файл  [new]
schi
Member

Откуда: Москва
Сообщений: 2601
nastyaa
мне просто задание дали что четко выводило по колонам и столбцам и чтобы программа записывала в файл, и потом можно было с файла записывать в программу(


Ну так тебе дали задание, а не участникам форума ? Ты и делай, остальным никакого навара с твоего задания не светит
9 авг 18, 10:33    [21635517]     Ответить | Цитировать Сообщить модератору
 Re: Почему у меня не выводит в txt файл  [new]
Valentin Kolesnikov
Member

Откуда:
Сообщений: 3065
nastyaa
вадя,

мне просто задание дали что четко выводило по колонам и столбцам и чтобы программа записывала в файл, и потом можно было с файла записывать в программу( можете пожауйлста помочь я двое суток не могу решить кто на этом форуме для меня как последняя надежда


Добрый день,

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

    public static void writeMatrixToFile(Matrix1D m, String filename) {

        try(FileWriter writer = new FileWriter(filename, false)){
            String strForWrite = "";
            
            writer.write(String.valueOf(m.getRowCount()));
            writer.write("\n");
            writer.write(String.valueOf(m.getColCount()));
            writer.write("\n");

            for (int i = 1; i <= m.getRowCount(); i++){
                for (int j = 1; j <= m.getColCount(); j++){
                    
                    strForWrite += m.get(i,j) + " ";
                }
                strForWrite += "\n";
            }

            writer.write(strForWrite);
            writer.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } catch(MatrixIndexException e) {
             e.printStackTrace();
        }
    }

    public static Matrix1D loadMatrixFromFile(String filename) {

        try(FileReader reader = new FileReader(filename)) {
            String strFromFile = "";

            while (reader.ready()) {
                strFromFile += (char) reader.read();
            }

            String[] arr = strFromFile.split(" |\n");
            Matrix1D result = new Matrix1D(Integer.valueOf(arr[0]), Integer.valueOf(arr[1]));

            int row = 1;
            int col = 1;

            for (int i = 2; i < arr.length; i++){
                if (!arr[i].equals("")){
                    result.put(row, col, Integer.valueOf(arr[i]));
                    col++;
                    if (col == result.getColCount() + 1){
                        col = 1;
                        row++;
                    }
                }
            }

            return result;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


--- a/src/main/java/matrix/MatrixUtils.java
+++ b/src/main/java/matrix/MatrixUtils.java
@@ -3,6 +3,7 @@ package matrix;
 import java.util.Random;
 import java.util.Scanner;
 import java.io.InputStreamReader;
+import java.io.IOException;
 import java.io.FileReader;
 import java.io.FileWriter;
 
@@ -111,8 +112,8 @@ public class MatrixUtils {
             writer.write(String.valueOf(m.getColCount()));
             writer.write("\n");
 
-            for (int i = 1; i < m.getRowCount(); i++){
-                for (int j = 1; j < m.getColCount(); j++){
+            for (int i = 1; i <= m.getRowCount(); i++){
+                for (int j = 1; j <= m.getColCount(); j++){
                     
                     strForWrite += m.get(i,j) + " ";
                 }
@@ -128,7 +129,7 @@ public class MatrixUtils {
         }
     }
 
-    public Matrix1D loadMatrixFromFile(String filename) {
+    public static Matrix1D loadMatrixFromFile(String filename) {
 
         try(FileReader reader = new FileReader(filename)) {
             String strFromFile = "";
@@ -140,15 +141,15 @@ public class MatrixUtils {
             String[] arr = strFromFile.split(" |\n");
             Matrix1D result = new Matrix1D(Integer.valueOf(arr[0]), Integer.valueOf(arr[1]));
 
-            int row = 0;
-            int col = 0;
+            int row = 1;
+            int col = 1;
 
             for (int i = 2; i < arr.length; i++){
                 if (!arr[i].equals("")){
-                    result.put(row, col) = Integer.valueOf(arr[i]);
+                    result.put(row, col, Integer.valueOf(arr[i]));
                     col++;
-                    if (col == result.getColCount()){
-                        col = 0;
+                    if (col == result.getColCount() + 1){
+                        col = 1;
                         row++;
                     }
                 }


С уважением, Валентин
9 авг 18, 10:49    [21635543]     Ответить | Цитировать Сообщить модератору
 Re: Почему у меня не выводит в txt файл  [new]
SQL2008
Member

Откуда:
Сообщений: 3599
nastyaa,

nastyaa
SQL2008, вот ошибка


sorry... писал по памяти, мог напутать с кодом.
9 авг 18, 10:56    [21635559]     Ответить | Цитировать Сообщить модератору
 Re: Почему у меня не выводит в txt файл  [new]
SQL2008
Member

Откуда:
Сообщений: 3599
Add нужно изменить на Append
            StringBuilder sbForWrite = new StringBuilder();

            for (int i = 0; i < m.getRowCount(); i++) {
                for (int j = 0; j < m.getColCount(); j++) {
		    sbForWrite.Append(m.get(i, j).toString());
		    sbForWrite.Append(" "); 
                }
                sbForWrite.Append("\n");
            }

		writer.write(sbForWrite.toString());
            	writer.close();

Еще раз извините за поспешный ответ.
9 авг 18, 10:59    [21635565]     Ответить | Цитировать Сообщить модератору
 Re: Почему у меня не выводит в txt файл  [new]
lleming
Member

Откуда:
Сообщений: 1482
nastyaa
вадя,

мне просто задание дали что четко выводило по колонам и столбцам и чтобы программа записывала в файл, и потом можно было с файла записывать в программу( можете пожауйлста помочь я двое суток не могу решить кто на этом форуме для меня как последняя надежда


вот здесь writer.write("\n"), я вот не помню точно но вместо "\n" нужно использовать "\\n", но проще взять System.lineSeparator().
Можно просто завести переменную
String lineBreak = System.lineSeparator();

Тогда перенос строки будет срабатывать гарантировано.

Кроме того есть число "1" а есть "111" соотвественно если они расположены друг под другом то в колонке должно быть минимум 3 символа т.е. "1" должно быть "␣␣1" а это значит в зависимости от количества символов в значении нужно прибавлять соотвествуещее количество пробелов.

Можно посмотреть что такое padding.
http://study-java.ru/uroki-java/formatirovanie-chisel-i-texta-v-java/
9 авг 18, 11:03    [21635573]     Ответить | Цитировать Сообщить модератору
 Re: Почему у меня не выводит в txt файл  [new]
nastyaa
Member

Откуда:
Сообщений: 332
SQL2008,

Спасибо вам ценю вашу помощь, но у меня снова ошибка

К сообщению приложен файл. Размер - 122Kb
9 авг 18, 11:15    [21635614]     Ответить | Цитировать Сообщить модератору
 Re: Почему у меня не выводит в txt файл  [new]
nastyaa
Member

Откуда:
Сообщений: 332
SQL2008,

Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - Erroneous sym type: java.lang.StringBuilder.Append
	at matrix.MatrixUtils.writeMatrixToFile(MatrixUtils.java:119)
	at matrix.Main.main(Main.java:19)
C:\Users\Adil\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
СБОРКА ЗАВЕРШЕНА СО СБОЕМ (общее время: 0 секунд)
9 авг 18, 11:16    [21635618]     Ответить | Цитировать Сообщить модератору
 Re: Почему у меня не выводит в txt файл  [new]
lleming
Member

Откуда:
Сообщений: 1482
ставим курсор после точки sbForWrite. давим space смотрим список функций и выбираем подходящую
"append" а не "Append"
9 авг 18, 11:18    [21635623]     Ответить | Цитировать Сообщить модератору
 Re: Почему у меня не выводит в txt файл  [new]
nastyaa
Member

Откуда:
Сообщений: 332
lleming,

вот так?

К сообщению приложен файл. Размер - 136Kb
9 авг 18, 11:20    [21635630]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4 5   вперед  Ctrl      все
Все форумы / Java Ответить