改行文字
| 日本語 | 改行文字 |
| 英語 | 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)となります。
}
}




