改行文字
日本語 | 改行文字 |
英語 | carriage return character、carriage return code |
ふりがな | かいぎょうもじ |
フリガナ | カイギョウモジ |
改行を行う文字のこと。
文字列リテラル中に記述された「\r」もしくは「\n」のこと。エディタやコンソールは、この文字を見つけると改行する。明確には文字ではないため「改行コード」とも呼ぶ。
ファイルに出力する場合、改行文字は注意が必要である。
改行文字はOSに依存する。文字コードには依存せず、OS毎に異なる改行文字を採用している。
たとえば、Windowsであれば「\r\n」、つまり2文字で改行の機能を持つ。OSの中には「\r」のみのものや、「\n」のみの場合もある。
ファイルへ書き込む際に「\r」や「\n」を直接記述すると、これらはそのまま記述されてしまう。
たとえば、文字出力ストリームクラスのwrite()メソッドに、"\r"や"\n"等の文字列リテラルとして渡すと、これらはそのまま文字出力ストリームへと出力される。
文字出力ストリームを使用してOSに適した改行文字を出力したい場合には、PrintWriterクラスのprintln()メソッドを使用するのがいいだろう。
また、任意に改行文字を取得したい場合には、システムプロパティ「line.separator」から取得する。実行時のOSの改行文字は、システムプロパティのひとつ「line.separator」を、SystemクラスのgetProperty()メソッドに渡すことで取得することができる。
とはいえ、改行文字は「OSに依存する」ため、インターネットでの受け渡し等を考えればOSに合わせて改行文字を変更することに大きな意味はないだろう。
むしろ読み込む側で改行文字が「\r」「\n」「\r\n」のどの場合でも対処できるようにした方がいいだろう。
文字列リテラル中に記述された「\r」もしくは「\n」のこと。エディタやコンソールは、この文字を見つけると改行する。明確には文字ではないため「改行コード」とも呼ぶ。
ファイルに出力する場合、改行文字は注意が必要である。
改行文字はOSに依存する。文字コードには依存せず、OS毎に異なる改行文字を採用している。
たとえば、Windowsであれば「\r\n」、つまり2文字で改行の機能を持つ。OSの中には「\r」のみのものや、「\n」のみの場合もある。
ファイルへ書き込む際に「\r」や「\n」を直接記述すると、これらはそのまま記述されてしまう。
たとえば、文字出力ストリームクラスのwrite()メソッドに、"\r"や"\n"等の文字列リテラルとして渡すと、これらはそのまま文字出力ストリームへと出力される。
文字出力ストリームを使用してOSに適した改行文字を出力したい場合には、PrintWriterクラスのprintln()メソッドを使用するのがいいだろう。
また、任意に改行文字を取得したい場合には、システムプロパティ「line.separator」から取得する。実行時のOSの改行文字は、システムプロパティのひとつ「line.separator」を、SystemクラスのgetProperty()メソッドに渡すことで取得することができる。
とはいえ、改行文字は「OSに依存する」ため、インターネットでの受け渡し等を考えればOSに合わせて改行文字を変更することに大きな意味はないだろう。
むしろ読み込む側で改行文字が「\r」「\n」「\r\n」のどの場合でも対処できるようにした方がいいだろう。
// Sample.java
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.BufferedReader;
import java.io.PrintWriter;
import java.io.IOException;
public class Sample
{
public static void main( String[] args )
{
// ※注:これはWindowsでのテストです。
// Unix系だと結果が異なるので注意してください。
// ファイルの絶対パス。
// このファイルが作られて文字列が書き込まれ、さらにあとで読み込みます。
String filePath = "D:/file.txt";
// テキストファイルとして書き込みます。
FileWriter fileWriter = null;
PrintWriter printWriter = null;
try
{
// FileWriterクラスを作ります。
fileWriter = new FileWriter( filePath );
// そのクラスを対象とするPrintWriterクラスを作ります。
printWriter = new PrintWriter( fileWriter );
// 出力します。
printWriter.println( "あ\nい" );
printWriter.print( "う" );
// \nはそのまま\n(0x0A)が書き込まれます。
// 対して、println()メソッドはOS固有の「改行文字」を出力します。
// Windowsであれば、\r\n(0x0D,0x0A)に変換されて書き込まれます。
}
catch( IOException e )
{
// ファイルが無かった場合等に、この
// IOException例外が投げられます。
e.printStackTrace();
}
finally
{
if( printWriter != null )
{
printWriter.close();
}
try
{
if( fileWriter != null )
{
fileWriter.close();
}
}
catch( IOException e )
{
e.printStackTrace();
}
}
// バイナリーファイルとして読み込みます。
FileInputStream fileInputStream = null;
try
{
// ファイルを読み込みます。
fileInputStream = new FileInputStream( filePath );
while( true )
{
// read()メソッドでファイルから1バイト取得します。
int i = fileInputStream.read();
if( i == -1 )
{
// -1が来たら終了です。
break;
}
// 16進数形式で出力します。
System.out.println( "0x" + Integer.toHexString( i ) );
}
// Windowsの場合、文字コードがCP932です。
// さらに改行コードが\r\nです。
// 82 // 「あ」の前の1バイト(リードバイト)。
// a0 // 「あ」の後ろ1バイト(トレイルバイト)。
// a // 「\n」。
// 82 // 「い」の前の1バイト(リードバイト)。
// a2 // 「い」の後ろ1バイト(トレイルバイト)。
// d // 「\r」。
// a // 「\n」。
// 82 // 「う」の前の1バイト(リードバイト)。
// a4 // 「う」の後ろ1バイト(トレイルバイト)。
// このように、"\n"はそのまま出力されましたが、
// println()メソッドはOS標準の改行文字を出力しました。
}
catch( IOException e )
{
// ファイルが無かった場合等に、この
// IOException例外が投げられます。
e.printStackTrace();
}
finally
{
try
{
if( fileInputStream != null )
{
fileInputStream.close();
}
}
catch( IOException e )
{
e.printStackTrace();
}
}
// テキストファイルとして読み込みます。
FileReader fileReader = null;
BufferedReader bufferedReader = null;
try
{
// ファイルを読み込みます。
fileReader = new FileReader( filePath );
bufferedReader = new BufferedReader( fileReader );
while( true )
{
// 1行ずつ取得します。
String string = bufferedReader.readLine();
if( string == null )
{
// nullの場合は最後まで来たということです。
break;
}
// 1行ずつ出力します。
System.out.println( string );
}
// あ
// い
// う
// このように、BufferedReaderクラスを使えば、改行コードに関わらず
// 1行ずつ取得してくれます。
}
catch( IOException e )
{
// ファイルが無かった場合等に、この
// IOException例外が投げられます。
e.printStackTrace();
}
finally
{
try
{
if( bufferedReader != null )
{
bufferedReader.close();
}
}
catch( IOException e )
{
e.printStackTrace();
}
try
{
if( fileReader != null )
{
fileReader.close();
}
}
catch( IOException e )
{
e.printStackTrace();
}
}
// OS固有の改行文字は、システムプロパティ"line.separator"で
// 取得できます。
String lineSeparator = System.getProperty( "line.separator" );
System.out.print( "line.separator=" );
char[] chars = lineSeparator.toCharArray();
for( int iF1 = 0; iF1 < chars.length; ++iF1 )
{
System.out.print( "0x" );
System.out.print( Integer.toHexString( chars[iF1] ) );
System.out.print( ", " );
}
System.out.println();
// line.separator=0xd, 0xa,
// Windowsのため、0x0D(\r), 0x0A(\n)となります。
}
}
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.BufferedReader;
import java.io.PrintWriter;
import java.io.IOException;
public class Sample
{
public static void main( String[] args )
{
// ※注:これはWindowsでのテストです。
// Unix系だと結果が異なるので注意してください。
// ファイルの絶対パス。
// このファイルが作られて文字列が書き込まれ、さらにあとで読み込みます。
String filePath = "D:/file.txt";
// テキストファイルとして書き込みます。
FileWriter fileWriter = null;
PrintWriter printWriter = null;
try
{
// FileWriterクラスを作ります。
fileWriter = new FileWriter( filePath );
// そのクラスを対象とするPrintWriterクラスを作ります。
printWriter = new PrintWriter( fileWriter );
// 出力します。
printWriter.println( "あ\nい" );
printWriter.print( "う" );
// \nはそのまま\n(0x0A)が書き込まれます。
// 対して、println()メソッドはOS固有の「改行文字」を出力します。
// Windowsであれば、\r\n(0x0D,0x0A)に変換されて書き込まれます。
}
catch( IOException e )
{
// ファイルが無かった場合等に、この
// IOException例外が投げられます。
e.printStackTrace();
}
finally
{
if( printWriter != null )
{
printWriter.close();
}
try
{
if( fileWriter != null )
{
fileWriter.close();
}
}
catch( IOException e )
{
e.printStackTrace();
}
}
// バイナリーファイルとして読み込みます。
FileInputStream fileInputStream = null;
try
{
// ファイルを読み込みます。
fileInputStream = new FileInputStream( filePath );
while( true )
{
// read()メソッドでファイルから1バイト取得します。
int i = fileInputStream.read();
if( i == -1 )
{
// -1が来たら終了です。
break;
}
// 16進数形式で出力します。
System.out.println( "0x" + Integer.toHexString( i ) );
}
// Windowsの場合、文字コードがCP932です。
// さらに改行コードが\r\nです。
// 82 // 「あ」の前の1バイト(リードバイト)。
// a0 // 「あ」の後ろ1バイト(トレイルバイト)。
// a // 「\n」。
// 82 // 「い」の前の1バイト(リードバイト)。
// a2 // 「い」の後ろ1バイト(トレイルバイト)。
// d // 「\r」。
// a // 「\n」。
// 82 // 「う」の前の1バイト(リードバイト)。
// a4 // 「う」の後ろ1バイト(トレイルバイト)。
// このように、"\n"はそのまま出力されましたが、
// println()メソッドはOS標準の改行文字を出力しました。
}
catch( IOException e )
{
// ファイルが無かった場合等に、この
// IOException例外が投げられます。
e.printStackTrace();
}
finally
{
try
{
if( fileInputStream != null )
{
fileInputStream.close();
}
}
catch( IOException e )
{
e.printStackTrace();
}
}
// テキストファイルとして読み込みます。
FileReader fileReader = null;
BufferedReader bufferedReader = null;
try
{
// ファイルを読み込みます。
fileReader = new FileReader( filePath );
bufferedReader = new BufferedReader( fileReader );
while( true )
{
// 1行ずつ取得します。
String string = bufferedReader.readLine();
if( string == null )
{
// nullの場合は最後まで来たということです。
break;
}
// 1行ずつ出力します。
System.out.println( string );
}
// あ
// い
// う
// このように、BufferedReaderクラスを使えば、改行コードに関わらず
// 1行ずつ取得してくれます。
}
catch( IOException e )
{
// ファイルが無かった場合等に、この
// IOException例外が投げられます。
e.printStackTrace();
}
finally
{
try
{
if( bufferedReader != null )
{
bufferedReader.close();
}
}
catch( IOException e )
{
e.printStackTrace();
}
try
{
if( fileReader != null )
{
fileReader.close();
}
}
catch( IOException e )
{
e.printStackTrace();
}
}
// OS固有の改行文字は、システムプロパティ"line.separator"で
// 取得できます。
String lineSeparator = System.getProperty( "line.separator" );
System.out.print( "line.separator=" );
char[] chars = lineSeparator.toCharArray();
for( int iF1 = 0; iF1 < chars.length; ++iF1 )
{
System.out.print( "0x" );
System.out.print( Integer.toHexString( chars[iF1] ) );
System.out.print( ", " );
}
System.out.println();
// line.separator=0xd, 0xa,
// Windowsのため、0x0D(\r), 0x0A(\n)となります。
}
}
// Sample.java import java.io.FileInputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.BufferedReader; import java.io.PrintWriter; import java.io.IOException; public class Sample { public static void main( String[] args ) { // ※注:これはWindowsでのテストです。 // Unix系だと結果が異なるので注意してください。 // ファイルの絶対パス。 // このファイルが作られて文字列が書き込まれ、さらにあとで読み込みます。 String filePath = "D:/file.txt"; // テキストファイルとして書き込みます。 FileWriter fileWriter = null; PrintWriter printWriter = null; try { // FileWriterクラスを作ります。 fileWriter = new FileWriter( filePath ); // そのクラスを対象とするPrintWriterクラスを作ります。 printWriter = new PrintWriter( fileWriter ); // 出力します。 printWriter.println( "あ\nい" ); printWriter.print( "う" ); // \nはそのまま\n(0x0A)が書き込まれます。 // 対して、println()メソッドはOS固有の「改行文字」を出力します。 // Windowsであれば、\r\n(0x0D,0x0A)に変換されて書き込まれます。 } catch( IOException e ) { // ファイルが無かった場合等に、この // IOException例外が投げられます。 e.printStackTrace(); } finally { if( printWriter != null ) { printWriter.close(); } try { if( fileWriter != null ) { fileWriter.close(); } } catch( IOException e ) { e.printStackTrace(); } } // バイナリーファイルとして読み込みます。 FileInputStream fileInputStream = null; try { // ファイルを読み込みます。 fileInputStream = new FileInputStream( filePath ); while( true ) { // read()メソッドでファイルから1バイト取得します。 int i = fileInputStream.read(); if( i == -1 ) { // -1が来たら終了です。 break; } // 16進数形式で出力します。 System.out.println( "0x" + Integer.toHexString( i ) ); } // Windowsの場合、文字コードがCP932です。 // さらに改行コードが\r\nです。 // 82 // 「あ」の前の1バイト(リードバイト)。 // a0 // 「あ」の後ろ1バイト(トレイルバイト)。 // a // 「\n」。 // 82 // 「い」の前の1バイト(リードバイト)。 // a2 // 「い」の後ろ1バイト(トレイルバイト)。 // d // 「\r」。 // a // 「\n」。 // 82 // 「う」の前の1バイト(リードバイト)。 // a4 // 「う」の後ろ1バイト(トレイルバイト)。 // このように、"\n"はそのまま出力されましたが、 // println()メソッドはOS標準の改行文字を出力しました。 } catch( IOException e ) { // ファイルが無かった場合等に、この // IOException例外が投げられます。 e.printStackTrace(); } finally { try { if( fileInputStream != null ) { fileInputStream.close(); } } catch( IOException e ) { e.printStackTrace(); } } // テキストファイルとして読み込みます。 FileReader fileReader = null; BufferedReader bufferedReader = null; try { // ファイルを読み込みます。 fileReader = new FileReader( filePath ); bufferedReader = new BufferedReader( fileReader ); while( true ) { // 1行ずつ取得します。 String string = bufferedReader.readLine(); if( string == null ) { // nullの場合は最後まで来たということです。 break; } // 1行ずつ出力します。 System.out.println( string ); } // あ // い // う // このように、BufferedReaderクラスを使えば、改行コードに関わらず // 1行ずつ取得してくれます。 } catch( IOException e ) { // ファイルが無かった場合等に、この // IOException例外が投げられます。 e.printStackTrace(); } finally { try { if( bufferedReader != null ) { bufferedReader.close(); } } catch( IOException e ) { e.printStackTrace(); } try { if( fileReader != null ) { fileReader.close(); } } catch( IOException e ) { e.printStackTrace(); } } // OS固有の改行文字は、システムプロパティ"line.separator"で // 取得できます。 String lineSeparator = System.getProperty( "line.separator" ); System.out.print( "line.separator=" ); char[] chars = lineSeparator.toCharArray(); for( int iF1 = 0; iF1 < chars.length; ++iF1 ) { System.out.print( "0x" ); System.out.print( Integer.toHexString( chars[iF1] ) ); System.out.print( ", " ); } System.out.println(); // line.separator=0xd, 0xa, // Windowsのため、0x0D(\r), 0x0A(\n)となります。 } }