Как получить EOL символ любого файла в Java - PullRequest
5 голосов
/ 23 января 2012

Я пытаюсь найти символ EOL файла.Я попробовал следующий фрагмент:

java.io.FileInputStream inputStream = null;  
inputStream=new java.io.FileInputStream (inputFile.trim());
java.util.Properties p = new java.util.Properties(System.getProperties());  
p.load(inputStream);  
System.setProperties(p);  
String lineSeperator=System.getProperties().getProperty("line.separator");  
System.out.println("--"+lineSeperator);

Результат, который я здесь получаю, всегда \r\n, даже если я читаю исходный файл Linux, где разделитель должен быть \n.

Что я делаю не так?

Ответы [ 2 ]

9 голосов
/ 23 января 2012

System.getProperty("line.separator") возвращает разделитель строки по умолчанию вашей операционной системы. Он не имеет ничего общего с тем, какой разделитель строк используется в данном файле.

Чтобы найти его, откройте файл как поток символов и итерируйте символы, пока не найдете '\r' или '\n'. Если вы сначала найдете '\n', то у вас есть файл Unix. Если вы найдете '\r', а затем '\n', у вас есть файл Windows. Если вы обнаружите, что '\r' не сопровождается '\n', у вас есть старый файл Mac.

Это, конечно, предполагает, что файл в первую очередь является текстовым файлом, что в файле используется один тип EOL, и что вам известна кодировка файла. Если вы не знаете кодировку, вы можете использовать тот же алгоритм и использовать поток байтов вместо потока символов.

Обратите внимание, что в большинстве случаев это неактуально, поскольку в Java есть API-интерфейсы, которые читают файл построчно и прекрасно обрабатывают все комбинации EOL.

1 голос
/ 23 января 2012

Это потому, что вы читаете свойство, связанное с ОС.Если вы запускаете эту программу в Windows и даже если ваш файл был создан в Linux, вы получите \ r \ n в качестве разделителя строк.Чтобы найти конец строки во входном файле, вам нужно найти другой способ ... может быть, регулярное выражение может вам помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...