java中文輸入
1. java中處理中文輸入,不需要用到的類是
Java把不同類型的輸入、輸出抽象為流stream,分為輸入流和輸出流,用統一的介面來表示
Java開發環境中提供了包java.io,其中包括一系列的類來實現輸入/輸出處理
InputStream是所有位元組輸入流的祖先,而OutputStream是所有位元組輸出流的祖先
public abstract class InputStream implements Closeable
public abstract class OutputStream implements Closeable, Flushable
具體子類: ByteArrayInputStream, FileInputStream, FilterInputStream, ObjectInputStream,
PipedInputStream, SequenceInputStream, StringBufferInputStream
InputStream
InputStream類是一個抽象類,方法包括:
int read()
int read(byte[])
int read(byte[],int,int)
void close()關閉流
int available()報告流中直接可讀的位元組數
skip(long)跳過流中指定的位元組
OutputStream
OutputStream也是一個抽象類。它的主要方法包括:
void write(int)
void write(byte[])
void write(byte[],int,int)
其中第一個方法的int型的參數對應要寫入的位元組,後兩個方法的參數與InputStream類似。
void close() 關閉輸出流
void flush() 強行將寫入緩沖區中剩餘的數據寫入
File file = new File("d:\\FileTest.java");
if (file.exists()) {
try (InputStream is = new FileInputStream(file);) {
byte[] buffer = new byte[8192];
int len = is.read(buffer);
while (len > 0) {
System.out.write(buffer, 0, len);
len = is.read(buffer);
}
} catch (Exception e) {
e.printStackTrace();
}
}
InputSream 和 OutputStream 中定義了 read() 和 write() 方法,它們被派生流類重載。位元組流是位元組序
列,它與外部設備中的位元組存在著一一對應的關系,不存在字元的轉換,被讀寫位元組的個數與外部設備中的位元組個數是相同的
基本輸入輸出方法
System類是Java語言中一個功能強大、非常有用的類,它提供了標准輸入/輸出及運行時的系統信息
System類不能創建對象,也就是說,System類的所有屬性和方法都是靜態的,引用時要以System 作為前綴
System.in與System.out是System類的兩個靜態屬性,分別對應了系統的標准輸入/輸出流 System類管理標准輸入輸出流和錯誤流
System.out:把輸出送到預設的顯示(通常是顯示器),是PrintStream的對象
System.in:從標准輸入獲取輸入(通常是鍵盤),是InputStream的對象
System.err:把錯誤信息送到預設的顯示,是PrintStream的對象
同時使用System.out和System.err輸出信息不能保證顯示順序就是執行順序,為了避免這種情況在測試代碼執行中經常使用System.err輸出
FileInputStream、FileOutputStream 順序讀取文件
PipedInputStream、PipedOutputStream 管道
ByteArrayInputStream、ByteArrayOutputStream 內存讀寫
FilterInputStream、FilterOutputStream 過濾流(有多線程同步)
DataInputStream、DataOutputStream 對數據類型讀寫,有多線程同步
BufferedInputStream、BufferedOutputStream 緩沖類型讀寫
1 、使用位元組流進行文件的單位元組復制
FileInputStream是InputStream的子類,FileInputStream屬於節點流,用於按位元組讀取文件內容
FileOutputStream是OutputStream的子類,FileOutputStream屬於節點流,用於按位元組輸出數據到文件中
//FileInputStream中read方法的定義
/**
從指定的輸入流中按位元組讀取數據,如果讀到流的末尾則返回-1,否則返回讀取到的數據。如果文件不存
在則異常FileNotFoundException【IOException的子類】
*/
public int read() throws IOException {
return read0();
}
//FileOutputStream中write方法的定義
//屬性,用於表示是否進行文件的追加操作而不是覆蓋操作
private final boolean append;
//構造器方法的定義,其中name是文件名稱,默認採用覆蓋操作
public FileOutputStream(String name) throws FileNotFoundException {
this(name != null ? new File(name) : null, false);
}
//按照位元組執行寫出int數據,自動會去除多餘的位元組。如果文件不存在則自動創建新文件,如果
文件已經存在則按照append的值決定採用的是追加操作還是覆蓋操作
public void write(int b) throws IOException {
write(b, append);
}
private native void write(int b, boolean append) throws IOException; //
由VM採用對等類的方式提供實現
public class Test1 {
public static void main(String[] args) throws IOException {
try (InputStream is = new FileInputStream("c:/面向對象文檔.txt");
OutputStream os = new FileOutputStream("test.txt");) {
int kk;
while ((kk = is.read()) != -1) {
os.write(kk);
}
}
}
}
2 、讀取 A.java 文件並在控制台上顯示
如何使用控制台輸出 : System.out 位元組流
分析:使用位元組流從 A.java 中一個位元組一個位元組的讀取內容,然後再使用 System.out.print 方法輸出即可
注意:讀取操作返回的 int 的取值范圍為 0-255 ,則表示這里不會有符號位,所以 is.read()==-1 不是只適合於文本文件
File ff = new File("T1.java");
if (ff.exists()) {// 如果文件存在則進行拷貝操作,否則提示文件不存在
InputStream is = new FileInputStream(ff);
OutputStream os = new FileOutputStream("t1.bak");
while (true) {
int kk = is.read();// 返回值應該是0-255,如果返回-1表示流已經結束
if (kk < 0)break;
os.write(kk);
}
is.close();
os.close();
} else
System.out.println("T1.java文件不存在");
InputStream基本輸入類
InputStream類是基本的輸入類。它定義了所有輸入流所需的方法。
public abstract int read() throws IOException讀取一個位元組並以整數的形式返回,0-255。如果 返回-1已到輸入流的末尾。
public int read(byte b[]) throws IOException讀取一系列位元組並存儲到一個數組,返回實際讀取的 位元組數。如果已經讀到輸入流的末尾則返回-1
public void close() throws IOException 關閉輸入流並釋放資源
public int read(byte b[],int offset,int length) throws IOException功能為從輸入流中讀數據。這一 方法有幾種重載形式,可以讀一個位元組或一組位元組。當遇到文件尾時,返回-1。最後一種形式中的 offset是指把結果放在b[]中從第offset個位元組開始的空間,length為長度
public long skip (long n) throws IOEnception 從輸入流跳過幾個位元組。返回值為實際跳過的位元組數
OutputStream基本輸出類
三個重載形式都是用來向輸出流寫數據的
public abstract void write(int b)向輸入流寫入一個位元組數據,該位元組為參數的低8位。
public void write(byte b[],int offset,int length)將一個位元組類型的數組中的從指定位置offset開始 的length個位元組寫入到輸出流
public void close( ) 關閉輸出流,釋放資源
public void write(byte b[])將一個位元組類型的數組中的數據寫入到輸出流
public void flush() 清除緩沖區,將緩沖區內尚未寫出的數據全部輸出
字元流
在頂層有 Reader 和 Writer 兩個抽象類。 Reader 和 Writer 中定義了 read() 和 write() 方法,它們被派生流類重載
Reader 抽象類的定義
public abstract class Reader implements Readable, Closeable {
//BIO,讀取一個有效的字元,返回值為0到65535的整數,如果到達流的末尾則返回-1
public int read() throws IOException
//BIO,讀取字元存儲到char數組中,返回讀取的字元個數,流結束則返回-1
public int read(char cbuf[]) throws IOException
//關閉流,同時釋放資源
abstract public void close() throws IOException;
Writer 抽象類的定義
public abstract class Writer implements Appendable, Closeable, Flushable {
//寫出一個字元到字元流,要寫的字元包含在給定整數值的16個低位;16個高位被忽略。
public void write(int c) throws IOException
//將字元數組中的指定部分內容壓入到字元流,從off開始共len個字元
abstract public void write(char cbuf[], int off, int len) throws
IOException;
/關閉流,同時釋放資源
abstract public void close() throws IOException;
相關的子類
InputStreamReader、OutputStreamWriter橋接流,用於自動實現位元組流和字元流的轉換
FileReader、FileWriter文件流,用於實現針對文本文件的讀寫操作
CharArrayReader、CharArrayWriter內存流,用於實現針對char數組的讀寫操作
PipedReader、PipedWriter管道流,用於線程之間的通訊
FilterReader、FilterWriter過濾流的父類
BufferedReader、BufferedWriter緩存流,用於在流中添加緩沖區
StringReader、StringWriter內存流,用於實現針對字元串的讀寫操作
使用字元流實現 txt 文件的讀取顯示【其中包含中文】
編寫一個程序,讀取文件 test.txt 的內容並在控制台輸出。如果源文件不存在,則顯示相應的錯誤信息。
字元流 Reader
int read()讀取一個字元並以整數的形式返回0-65535,如果返回-1則已到輸入流末尾
int read(char[] cbuf)讀取一系列字元並存儲到一個數組中,返回實際讀取的字元數,如果讀到輸入流末尾則返回-1
void close()關閉輸入流並釋放內存資源
int read(char[] cbuf, int off, int len) 讀取len個字元並存儲到一個數組中,從off位置開始,返回實
際讀取的字元數,如果讀取到輸入流末尾則返回-1
long skip(long n)跳過n個字元不讀,返回實際跳過的位元組數
字元流 Writer
void write(int c) 將字元(int數組的低8位)壓入到字元流中
void write(char[] cbuf, int off, int len)將字元數組中的指定部分內容壓入到字元流中,從off開始共len個字元
void write(String str) 將字元串中的內容壓入到字元流中
void close() 關閉流並釋放所佔用的資源
void write(String str, int off, int len) 將字元串中的指定部分內容壓入到字元流中,從下標off開始共len個字元
void flush()刷新緩沖區,將緩沖區中的數據全部送出到目標地,然後清空緩沖區
void write(char[] cbuf) 將字元數組中的所有數據壓入到字元流中
一般來說:一次讀寫一個字元效率太低,可以引入 char[] 數組提高執行效率
小結
在學些BIO時記憶父類的方法,區分子類的實現不同
InputStream中的方法 read(byte[]):int; Reader中方法read(char[]):int 如果到達流末尾 則-1
OutputStream中的方法 write(byte[],0,len):void;Writer中的方法 write(char[],0,len)/write(String)
一般在使用中,如果讀取數據使用位元組流,則寫出數據採用的也是位元組流;不建議混用,除非引入 橋接流
文件流
FileInputStream("file-name") FileInputStream(File) FileNotFoundException
FileReader("file-name") FileReader(File) FileNotFoundException
FileOutputStream("file-name") FileOutputStream("file-name",true) 默認文件覆蓋,如果 參數true表示追加
FileWriter("file-name") FileWriter("file-name",true)
一般不使用單位元組或者單字元的操作方法,使用數組
注意:try(){}是推薦寫法,否則應該使用try{}finally{}結構保證流的關閉
針對二進制文件不建議使用字元流,建議使用位元組流進行操作,否則有可能拷貝文件出現問題:
如果針對文本文件則建議使用字元流,因為編碼使用比較方便
文章知識點與官方知識檔案匹配
Java技能樹類和介面類和面向對象
89124 人正在系統學習中
點擊閱讀全文
打開CSDN,閱讀體驗更佳
java用於輸入輸出流的類_java輸入輸出流_lsgn的博客
java輸入輸出流 java IO綜述 在整個Java.io包中最重要的就是5個類和一個介面。5個類指的是File、OutputStream、InputStream、Writer、Reader;一個介面指的是Serializable。 Java I/O主要包括如下幾個層次,包含三個部分: ...
java常見輸入輸出類型_3分鍾秒懂大數據的博客
輸入:每行輸入一個數,連續輸入n行,遇到0結束輸入,然後輸出結果。 importjava.util.ArrayList; importjava.util.Scanner; publicclassTest4{ publicstaticvoidmain(String[] args){ Scannersc=newScanner(System.in); ...
25、JAVA進階——輸入輸出流
一、認識Java的流 二、使用位元組流讀寫文本文件 1、使用位元組流類FileInputStream讀文本文件 2、使用位元組流類FileOutputStream寫文本文件 三、使用字元流讀寫文本文件 1、使用字元流類BufferedReader和FileReader讀文本文件 2、使用字元流類BufferedWrite和FileWrite寫文本文件 四、讀寫二進制文件 1、 使用位元組流讀二進制文件 2、 使用位元組流寫二進制文件 五、序列化和反序列化 1、認識序列化 2、序列化保存對
繼續訪問
java 輸入類_java 輸入輸出類
java中輸入輸出類如果理不清思路的話就會很混亂!一.File類提供與操作系統無關的文件操作!可以查看api文檔了解它的方法二.輸出操作:1.把信息輸出到屏幕上最簡單的操作就是使用標准輸出:System.out.println();下面討論一下流方式的輸出,與之相關的類如下OutputStreamWriter:它提供字元流到位元組流的轉換,換句話說它寫入字元數據然後按照指定字元集轉換為位元組數據Buf...
繼續訪問
JAVA的輸入輸出_努力的地球人的博客_java輸出
Java的輸入 Scanner類 為了使用scanner類,我們首先需要導入java.util.Scanner包 import java.util.Scanner; 1 創建scanner對象,從用戶獲取輸入 //創建scanner對象 Scanner str=new Scanner(System.in); //接受用戶輸入 int w=str.nextIn...
java輸入輸出_java中輸入輸出總結_weixin_39609407的博客
標准輸入studin,對象是鍵盤。 標准輸出stdout,對象是屏幕。 標准錯誤輸出stderr,對象也是屏幕。 二、java.io包中的數據流和文件類 位元組流:從InputStream和OutputStream派生出來的一系列類。這類流以位元組(byte)為基本處理單位。
Java——不同數據類型的輸入輸出方式與轉化方式
java 中不同數據類型的 輸入方法 輸出格式 與 轉化方式
繼續訪問
Java文本輸出常用類
package com.ss.extract; import java.io.*; import org.apache.log4j.Logger; /** * 結果輸出類 * @author Shu */ public class ResultOutput { private ...
繼續訪問
1.Java基礎入門 -(2)輸入輸出類_菜鳥的小蟲子的博客
一. Java Scanner 類 java.util.Scanner是 Java5 的新特徵,我們可以通過 Scanner 類來獲取用戶的輸入。 Scanner 對象的基本語法: Scanner in= new Scanner(System.in); 示例1: 輸入結果: ...
java的輸入輸出流類型_理解JAVA輸入輸出流_天接雲濤的博客
1、位元組流抽象類 InputStream輸入流 OutputStream輸出流 2、字元流抽象類 Reader 輸入字元流 Writer 輸出字元流 四、JAVA中流體系架構 有一些對流進行操作的基本的方法,我們以文件輸入輸出流進行說明: ...
java的輸出類
System.out這個類是PrintStream類,定義如下 public class PrintStream extends FilterOutputStream PrintStream都是用print的相關函數輸出到控制台上。print的實現都是用write(String s)實現。 而,PrintWriter這個輸出類,也同樣實現輸出:PrintWriter extends ...
繼續訪問
Java中的各種輸出形式
一、Java中的各種輸出形式: package cn.jl.lwj; public class Demo00 { public static void main(String[] args) { //標識符定義 區分大小寫 int a = 5; int A = 6; //區分大小寫 int Class = 6; int age = 5; //定義常量 final int AGE_MAX = 30;...
繼續訪問
java中的BIO基礎-3
java中的io基礎
繼續訪問
Java學習-IO流進階
緩沖流也稱為高效流、或者高級流。之前學習的位元組流可以稱為原始流。
繼續訪問
IO進階之高級IO
高級IO
繼續訪問
Java中的IO進階操作
Java中的IO進階操作 一、序列化和反序列化 常用於多台伺服器之間進行java對象的數據傳遞。 1.概念 序列化 是指程序中准備好的Java對象,永久的保存在磁碟中,這個過程其實是一個out的動作。 ObjectOutputStream:通過在流中使用文件可以實現對象的持久存儲。 創建對象:ObjectOutputStream(OutputStream out) 常用方法: void writeObject(Object obj):將指定的對象寫入ObjectOutputStream 反序列化 是指把
繼續訪問
Java IO最詳解,歡迎提出意見
Java IO 詳解 初學java,一直搞不懂java裡面的io關系,在網上找了很多大多都是給個結構圖草草描述也看的不是很懂。而且沒有結合到java7 的最新技術,所以自己來整理一下,有錯的話請指正,也希望大家提出寶貴意見。 首先看個圖:(如果你也是初學者,我相信你看了真個人都不好了,想想java設計者真是煞費苦心啊!) 這是java io 比較基本的一些處理流,除此之外我們還會...
繼續訪問
java輸出類型_java中各種類型的輸入輸出
import java.lang.Exception;import java.lang.String;import java.util.Scanner;public class test {public static void main(String[] args) {Scanner s = new Scanner(System.in);char ch;System.out.print("Char...
繼續訪問
java中輸入流的類_Java中的輸入/輸出流類
Java中包含的輸入/輸出流類 1.java.io包中的介面 (1)處理位元組流的有DataInput介面和DataOutput介面,RandomAccessFile同時實現了這兩個介面; (2)處理對象流的有ObjectInput介面和ObjectOutput介面,ObjectInputStream類實現了ObjectInput介面,ObjectOutputStream類實現了ObjectOutp...
繼續訪問
使用java的輸入/輸出類
1. 什麼是IO? I:input 輸入 通常做讀取操作(將不同數據源的數據讀入到內存中,也叫讀取流) O:output 輸出通常做寫入操作(將內存中的數據寫入到不同的數據源,也叫寫入流) 2. 理解流的概念。 想像一下自來水公司要把水輸到用戶家裡,應該先把自來水公司到用戶家裡的連接水管建好,再將水輸出去。管道里輸送的是水,但IO里輸送的是位元組。 u流是...
繼續訪問
Java中的輸入/輸出流類
Java中包含的輸入/輸出流類 1.java.io包中的介面 (1)處理位元組流的有DataInput介面和DataOutput介面,RandomAccessFile同時實現了這兩個介面; (2)處理對象流的有ObjectInput介面和ObjectOutput介面,ObjectInputStream類實現了ObjectInput介面,ObjectOutputStream類實現了ObjectOutp...
繼續訪問
最新發布 【Java基礎】自定義一個格式輸出類
在項目實際開發中,後端介面都按照一定的格式輸出給前端調用,在返回中包括狀態碼和介面的主要作用等注釋,再包含實際的data。
繼續訪問
IO流(進階提高)
本篇文章繼上一篇IO流(小試牛刀)繼續更新JavaIO流的知識。 常見IO流的結構圖解: 回顧一下IO的基本介面知識: ————————————————————我是不起眼的分割線———————————————————————— IO的序列化與反序列化 Java序列化是指把Java對象轉換為位元組序列的過程;Java反序列化是指把位元組序列恢復為Java對象的過...
繼續訪問
java進階8——IO流
File類 File概述 File文件和目錄路徑名的抽象表示形式。即,Java中把文件或者目錄(文件夾)都封裝成File對象。也就是說如果我們要去操作硬碟上的文件,或者文件夾只要找到File這個類即可。 File類的構造函數 File(String pathname); // 將一個字元串路徑封裝成File對象 File(String parent,String child);...
繼續訪問
Java IO流進階之常用流(一)
請多參考JDK文檔:http://www.matools.com/api/java8或https://docs.oracle.com/javase/8/docs/api/ 轉換流——OutputStreamWriter類和InputStreamReader類 位元組與字元的轉換流: OutputStreamWriter:是Writer類的子類,將輸出的字元流變為位元組流。 InputStreamRe...
繼續訪問
詳解JAVA I/O之二——java.io層次結構
<br />java I/O(Input/Output)學習——java.io層次結構文章分類:Java編程stream代表的是任何有能力產出數據的數據源,或是任何有能力接收數據的接收源。在Java的IO中,所有的stream(包括Inputstream和Out stream)都包括兩種類型: <br />(1)位元組流 <br /><br /> 表示以位元組為單位從stream中讀取或往stream中寫入信息,即io包中的inputstream類和outputstream類的派生類。通常用來讀取二進制數據,
2. java怎麼 輸入輸出中文
<script language="javascript">
var a
function aa(){
document.write("想輸出的漢字")
}
</script>
<input type=button value=單擊 onclick="aa()">
3. java中輸入輸出中文亂碼,怎麼辦
解決辦法:
1.在代碼區域右鍵
->
run
as
->
run
configurations
->
common(右側)
->
console
encoding
如果出現此錯誤,此時的編碼格式應該是UTF-8,選擇Other,這時可能沒有GBK選項,如果沒有,則執行之後操作。
2.更改該項目的文本文件編碼
4. 為什麼java編譯器輸入法不能切換到中文
將EN那個(下面可能還有其他什麼輸入法)整個刪除,再在默認輸入語音下面選擇中文(中國)-簡中-美式,然後建議你只安一個輸入法,就安搜狗吧,這樣中英切換就方便許多了,另外,如果你不想只安一個輸入法,你只要在用搜狗輸入法時,如果想換英文的,只要安shift就行了.
2.在任務欄前多出了CH和EN兩個字母:
使用windows操作系統中文版並不表示只能進行中文語言的錄入(中文版是指用戶界面是面向中文用戶的)。
所以你打開 控制面板->區域和語言選項->「語言」選項卡->「詳細信息」按鈕,在「文字輸入和輸入語言」窗口中點「添加」按鈕,彈出「添加輸入語言」對話框中第一欄就是「輸入語言」,它表示選錄入時的背景語言(第二欄「鍵盤布局\輸入法」是在此錄入背景語言下選輸入法),其下拉列表中可看到什麼 希臘語 匈牙利語 等。任務欄的EN表示背景語言為英語。
一般用戶用不上這個。在前面「文字輸入和輸入語言」窗口中「已安裝的服務(I)」區域中「EN
英語(X國)」下的輸入法一個一個選中然後點「刪除」,最後確定就是了。
後面你說的是Ctrl加Shift應該是各輸入法間切換的快捷鍵,而不是搜狗拼音的中英文狀態間的切換。進入搜狗拼音輸入法「設置屬性」->按鍵設置 可見其中英文狀態切換要麼不用快捷鍵要麼單用ctrl或shift。
、首先任務欄上的輸入法圖標上點右鍵選擇設置。
2、然後選擇「高級鍵設置」,選中第一個「在輸入語言之間」,然後點擊下面的「更改按鍵順序」,先
勾選「切換輸入語言」下面選擇左手ALT。取消右邊「切換鍵盤布局」前的勾(即選擇「未分配」),點
擊確定。
然後選中「中文(簡體)輸入法 - 輸入法/非輸入法切換」,點擊「更改按鍵順序」,取消「啟用按鍵順
序」前的勾,再確定。
3、再次進入步驟2的設置,選中「在輸入語言之間」,點擊「更改按鍵順序」,把右邊「切換鍵盤布局」
的「Ctrl+Shift」打上勾,確定後退出。
4、搞定!
解決了無法使用ctrl+shift以及ctrl+space切換輸入法的問題。