Существует ли способ сделать вывод PrintWriter к формату UNIX?

1112 Спасибо за отличные ответы, ребята. Вы дали мне много размышлений и помогли мне сформировать мое собственное мнение / стратегию, которая сводится к следующему:

Разрешить пустые значения if-and-only-if, если нулевое значение в этом столбце будет иметь конкретное значение для вашего приложения.

Пара общих значений для нуля:

  • Все, что исходит непосредственно от пользователя
    • Здесь нуль означает «пользователь не вошел»
    • Для этих столбцов лучше разрешить нулевые значения, иначе вы просто получите ввод типа asdasd@asd.com .
  • Внешние ключи для отношений «0 или 1»
    • null означает «нет связанной строки»
    • Так что разрешите пустые значения для этих столбцов
    • Это один является спорным , но это мое мнение.

В общем, если вы не можете придумать полезного значения для нуля в столбце, это должно быть NOT NULL. Вы всегда можете изменить его на nullable позже.

Пример такого рода вещей, которыми я закончил:

create table SalesOrderLine (
    Id int identity primary key,
    -- a line must have exactly one header:
    IdHeader int not null foreign key references SalesOrderHeader, 
    LineNumber int not null, -- a line must have a line number
    IdItem int not null, -- cannot have null item
    Quantity decimal not null, -- maybe could sell 0, but not null
    UnitPrice decimal not null, -- price can be 0, but not null
    -- a null delivery address means not for delivery:
    IdDeliveryAddress int foreign key references Address, 
    Comment varchar(100), -- null means user skipped it
    Cancelled bit not null default (0) -- true boolean, not three-state!
    Delivered datetime, -- null means not yet delivered
    Logged datetime not null default (GetDate()) -- must be filled out
)

7
задан Monster 18 June 2009 в 18:08
поделиться

2 ответа

Примечание: как сообщается в комментариях, приведенный ниже подход не работает JDK 9+. Используйте подход, описанный в ответе Джеймса Х.


Под «форматом Unix» вы имеете в виду использование «\ n» в качестве ограничителя строки вместо «\ r \ n»? Просто установите системное свойство line.separator перед созданием PrintWriter.

В качестве демонстрации:

import java.io.*;

public class Test
{
    public static void main(String[] args)
        throws Exception // Just for simplicity
    {
        System.setProperty("line.separator", "xxx");
        PrintWriter pw = new PrintWriter(System.out);
        pw.println("foo");
        pw.println("bar");
        pw.flush();
    }
}

Конечно, это устанавливает его для всей JVM, что не идеально, но может быть всем, что вам нужно.

13
ответ дан 6 December 2019 в 05:49
поделиться

Предполагая, что проблема форматирования, о которой вы говорите, заключается в том, что разрывы строк в Windows - это перевод строки возврата каретки ( «\ r \ n» ), а символы Unix - перевод строки ( "\ n" ), самый простой способ убедиться, что в вашем файле используется LF, а не CRLF, - отказаться от println и вместо этого использовать print ("\ n") для завершения строк.

Итак, вместо:

writer.println("foo,bar,88");

используйте

writer.print("foo,bar,88\n");

Вы можете просто выполнить поиск в соответствующих файлах для println , чтобы убедиться, что вы поймаете их все.

3
ответ дан 6 December 2019 в 05:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: