不知道是否理解對了你的意思,大概寫了一下:
創(chuàng)新互聯(lián)主營石獅網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都app軟件開發(fā),石獅h5重慶小程序開發(fā)公司搭建,石獅網(wǎng)站營銷推廣歡迎石獅等地區(qū)企業(yè)咨詢
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.io.StringWriter;
public class FileReadAndWrite {
private static final int DEFAULT_BUFFER_SIZE = 1024;
public static void main(String[] args) {
File file = new File("E:/workspace/FileIOTest/src/a.txt");
String str = file2String(file, "UTF-8");
str = str.replace('d', 'f');
string2File(str,"E:/workspace/FileIOTest/src/b.txt");
System.out.println("處理完畢");
}
/**
* 文本文件轉(zhuǎn)換為指定編碼的字符串
*
* @param file
* 文本文件
* @param encoding
* 編碼類型
* @return 轉(zhuǎn)換后的字符串
* @throws IOException
*/
public static String file2String(File file, String encoding) {
InputStreamReader reader = null;
StringWriter writer = new StringWriter();
try {
if (encoding == null || "".equals(encoding.trim())) {
reader = new InputStreamReader(new FileInputStream(file),
encoding);
} else {
reader = new InputStreamReader(new FileInputStream(file));
}
// 將輸入流寫入輸出流
char[] buffer = new char[DEFAULT_BUFFER_SIZE];
int n = 0;
while (-1 != (n = reader.read(buffer))) {
writer.write(buffer, 0, n);
}
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if (reader != null)
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// 返回轉(zhuǎn)換結(jié)果
if (writer != null)
return writer.toString();
else
return null;
}
/**
* 將字符串寫入指定文件(當(dāng)指定的父路徑中文件夾不存在時(shí),會最大限度去創(chuàng)建,以保證保存成功!)
*
* @param res
* 原字符串
* @param filePath
* 文件路徑
* @return 成功標(biāo)記
*/
public static boolean string2File(String res, String filePath) {
boolean flag = true;
BufferedReader bufferedReader = null;
BufferedWriter bufferedWriter = null;
try {
File distFile = new File(filePath);
if (!distFile.getParentFile().exists())
distFile.getParentFile().mkdirs();
bufferedReader = new BufferedReader(new StringReader(res));
bufferedWriter = new BufferedWriter(new FileWriter(distFile));
char buf[] = new char[1024]; // 字符緩沖區(qū)
int len;
while ((len = bufferedReader.read(buf)) != -1) {
bufferedWriter.write(buf, 0, len);
}
bufferedWriter.flush();
bufferedReader.close();
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
flag = false;
return flag;
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return flag;
}
}
Java技術(shù)與Java虛擬機(jī)中文JAVA技術(shù)網(wǎng)g0cVV+]
中文JAVA技術(shù)網(wǎng)I5Zz[ }'Og G6Y
說起Java,人們首先想到的是Java編程語言,然而事實(shí)上,Java是一種技術(shù),它由四方面組成:Java編程語言、Java類文件格式、Java虛擬機(jī)和Java應(yīng)用程序接口(Java API)。它們的關(guān)系如下圖所示:
[)|)k3b9M#\)w%Q{~r0中文JAVA技術(shù)網(wǎng):cP+] _2tRtm*K
中文JAVA技術(shù)網(wǎng)yz;_Y0FB
圖1 Java四個(gè)方面的關(guān)系
,YWx ^L |Q0運(yùn)行期環(huán)境代表著Java平臺,開發(fā)人員編寫Java代碼(.java文件),然后將之編譯成字節(jié)碼(.class文件)。最后字節(jié)碼被裝入內(nèi)存,一旦字節(jié)碼進(jìn)入虛擬機(jī),它就會被解釋器解釋執(zhí)行,或者是被即時(shí)代碼發(fā)生器有選擇的轉(zhuǎn)換成機(jī)器碼執(zhí)行。從上圖也可以看出Java平臺由Java虛擬機(jī)和Java應(yīng)用程序接口搭建,Java語言則是進(jìn)入這個(gè)平臺的通道,用Java語言編寫并編譯的程序可以運(yùn)行在這個(gè)平臺上。這個(gè)平臺的結(jié)構(gòu)如下圖所示:
x[+DX0\:W-o@a0中文JAVA技術(shù)網(wǎng)"? c3Y6bj-_
中文JAVA技術(shù)網(wǎng)P @+O3lf_pJ b
中文JAVA技術(shù)網(wǎng)5h:OY TyL2\|Z
在Java平臺的結(jié)構(gòu)中, 可以看出,Java虛擬機(jī)(JVM) 處在核心的位置,是程序與底層操作系統(tǒng)和硬件無關(guān)的關(guān)鍵。它的下方是移植接口,移植接口由兩部分組成:適配器和Java操作系統(tǒng), 其中依賴于平臺的部分稱為適配器;JVM 通過移植接口在具體的平臺和操作系統(tǒng)上實(shí)現(xiàn);在JVM 的上方是Java的基本類庫和擴(kuò)展類庫以及它們的API, 利用Java API編寫的應(yīng)用程序(application) 和小程序(Java applet) 可以在任何Java平臺上運(yùn)行而無需考慮底層平臺, 就是因?yàn)橛蠮ava虛擬機(jī)(JVM)實(shí)現(xiàn)了程序與操作系統(tǒng)的分離,從而實(shí)現(xiàn)了Java 的平臺無關(guān)性。
h6l-v;HV1SvYO0中文JAVA技術(shù)網(wǎng)-G5cAK(e w}
那么到底什么是Java虛擬機(jī)(JVM)呢?通常我們談?wù)揓VM時(shí),我們的意思可能是:中文JAVA技術(shù)網(wǎng),T,Y5d(B5r
中文JAVA技術(shù)網(wǎng)yWv~s;J
對JVM規(guī)范的的比較抽象的說明;
b0r[/o_k+p0對JVM的具體實(shí)現(xiàn);中文JAVA技術(shù)網(wǎng)Xdt8M1sP T_"_s
在程序運(yùn)行期間所生成的一個(gè)JVM實(shí)例。中文JAVA技術(shù)網(wǎng)H k0g,~ hO\
中文JAVA技術(shù)網(wǎng)C3@ w6O-a
對JVM規(guī)范的的抽象說明是一些概念的集合,它們已經(jīng)在書《The Java Virtual Machine Specification》(《Java虛擬機(jī)規(guī)范》)中被詳細(xì)地描述了;對JVM的具體實(shí)現(xiàn)要么是軟件,要么是軟件和硬件的組合,它已經(jīng)被許多生產(chǎn)廠商所實(shí)現(xiàn),并存在于多種平臺之上;運(yùn)行Java程序的任務(wù)由JVM的運(yùn)行期實(shí)例單個(gè)承擔(dān)。在本文中我們所討論的Java虛擬機(jī)(JVM)主要針對第三種情況而言。它可以被看成一個(gè)想象中的機(jī)器,在實(shí)際的計(jì)算機(jī)上通過軟件模擬來實(shí)現(xiàn),有自己想象中的硬件,如處理器、堆棧、寄存器等,還有自己相應(yīng)的指令系統(tǒng)。中文JAVA技術(shù)網(wǎng)nC/D IHP,|
A)R-DFw o2X0JVM在它的生存周期中有一個(gè)明確的任務(wù),那就是運(yùn)行Java程序,因此當(dāng)Java程序啟動的時(shí)候,就產(chǎn)生JVM的一個(gè)實(shí)例;當(dāng)程序運(yùn)行結(jié)束的時(shí)候,該實(shí)例也跟著消失了。下面我們從JVM的體系結(jié)構(gòu)和它的運(yùn)行過程這兩個(gè)方面來對它進(jìn)行比較深入的研究。
Z6?gXm!~0Java虛擬機(jī)的體系結(jié)構(gòu)
2XFZ@"I I,\0
e-i'_;P X a0剛才已經(jīng)提到,JVM可以由不同的廠商來實(shí)現(xiàn)。由于廠商的不同必然導(dǎo)致JVM在實(shí)現(xiàn)上的一些不同,然而JVM還是可以實(shí)現(xiàn)跨平臺的特性,這就要?dú)w功于設(shè)計(jì)JVM時(shí)的體系結(jié)構(gòu)了。中文JAVA技術(shù)網(wǎng){ v2TtMlG?"]*N
中文JAVA技術(shù)網(wǎng),HK3YQN k
我們知道,一個(gè)JVM實(shí)例的行為不光是它自己的事,還涉及到它的子系統(tǒng)、存儲區(qū)域、數(shù)據(jù)類型和指令這些部分,它們描述了JVM的一個(gè)抽象的內(nèi)部體系結(jié)構(gòu),其目的不光規(guī)定實(shí)現(xiàn)JVM時(shí)它內(nèi)部的體系結(jié)構(gòu),更重要的是提供了一種方式,用于嚴(yán)格定義實(shí)現(xiàn)時(shí)的外部行為。每個(gè)JVM都有兩種機(jī)制,一個(gè)是裝載具有合適名稱的類(類或是接口),叫做類裝載子系統(tǒng);另外的一個(gè)負(fù)責(zé)執(zhí)行包含在已裝載的類或接口中的指令,叫做運(yùn)行引擎。每個(gè)JVM又包括方法區(qū)、堆、Java棧、程序計(jì)數(shù)器和本地方法棧這五個(gè)部分,這幾個(gè)部分和類裝載機(jī)制與運(yùn)行引擎機(jī)制一起組成的體系結(jié)構(gòu)圖為:中文JAVA技術(shù)網(wǎng)BW0EZCI
2o\d oz0中文JAVA技術(shù)網(wǎng)%K1Hl:f ~(@Y(U
圖3 JVM的體系結(jié)構(gòu)中文JAVA技術(shù)網(wǎng)0P/b(jt U$x
7{F*d8f7ySt:Q0JVM的每個(gè)實(shí)例都有一個(gè)它自己的方法域和一個(gè)堆,運(yùn)行于JVM內(nèi)的所有的線程都共享這些區(qū)域;當(dāng)虛擬機(jī)裝載類文件的時(shí)候,它解析其中的二進(jìn)制數(shù)據(jù)所包含的類信息,并把它們放到方法域中;當(dāng)程序運(yùn)行的時(shí)候,JVM把程序初始化的所有對象置于堆上;而每個(gè)線程創(chuàng)建的時(shí)候,都會擁有自己的程序計(jì)數(shù)器和Java棧,其中程序計(jì)數(shù)器中的值指向下一條即將被執(zhí)行的指令,線程的Java棧則存儲為該線程調(diào)用Java方法的狀態(tài);本地方法調(diào)用的狀態(tài)被存儲在本地方法棧,該方法棧依賴于具體的實(shí)現(xiàn)。中文JAVA技術(shù)網(wǎng) t?!Pz!B]
"^x1MT5qj0下面分別對這幾個(gè)部分進(jìn)行說明。
/}C2v7b:]%vo[|0中文JAVA技術(shù)網(wǎng)'z/@1RG7[E1`8B
執(zhí)行引擎處于JVM的核心位置,在Java虛擬機(jī)規(guī)范中,它的行為是由指令集所決定的。盡管對于每條指令,規(guī)范很詳細(xì)地說明了當(dāng)JVM執(zhí)行字節(jié)碼遇到指令時(shí),它的實(shí)現(xiàn)應(yīng)該做什么,但對于怎么做卻言之甚少。Java虛擬機(jī)支持大約248個(gè)字節(jié)碼。每個(gè)字節(jié)碼執(zhí)行一種基本的CPU運(yùn)算,例如,把一個(gè)整數(shù)加到寄存器,子程序轉(zhuǎn)移等。Java指令集相當(dāng)于Java程序的匯編語言。中文JAVA技術(shù)網(wǎng) ^sH2X*b,Z
q3[ OT`z"M4V0Java指令集中的指令包含一個(gè)單字節(jié)的操作符,用于指定要執(zhí)行的操作,還有0個(gè)或多個(gè)操作數(shù),提供操作所需的參數(shù)或數(shù)據(jù)。許多指令沒有操作數(shù),僅由一個(gè)單字節(jié)的操作符構(gòu)成。
P.R.Uxbfc0
o"o qq9_0虛擬機(jī)的內(nèi)層循環(huán)的執(zhí)行過程如下:中文JAVA技術(shù)網(wǎng)3Hn8B r,xE
MjHj(zBG t"m P0do{
l$Iz V!M9[0取一個(gè)操作符字節(jié);中文JAVA技術(shù)網(wǎng)7[?3o?,v A|3b+O R
根據(jù)操作符的值執(zhí)行一個(gè)動作;
I(^e)G)Hf6`0}while(程序未結(jié)束)中文JAVA技術(shù)網(wǎng)y}0J/|:so
中文JAVA技術(shù)網(wǎng)c|%L(ud
由于指令系統(tǒng)的簡單性,使得虛擬機(jī)執(zhí)行的過程十分簡單,從而有利于提高執(zhí)行的效率。指令中操作數(shù)的數(shù)量和大小是由操作符決定的。如果操作數(shù)比一個(gè)字節(jié)大,那么它存儲的順序是高位字節(jié)優(yōu)先。例如,一個(gè)16位的參數(shù)存放時(shí)占用兩個(gè)字節(jié),其值為:
0H.w`wb}.X0中文JAVA技術(shù)網(wǎng)y{X;n.u4PT+e)D7\E
第一個(gè)字節(jié)*256+第二個(gè)字節(jié)字節(jié)碼。中文JAVA技術(shù)網(wǎng)"V[]J!_0v+D
5^t6E[3aW![0指令流一般只是字節(jié)對齊的。指令tableswitch和lookup是例外,在這兩條指令內(nèi)部要求強(qiáng)制的4字節(jié)邊界對齊。
#Rop'v6w FS0中文JAVA技術(shù)網(wǎng)g8Ai _)iw8r
對于本地方法接口,實(shí)現(xiàn)JVM并不要求一定要有它的支持,甚至可以完全沒有。Sun公司實(shí)現(xiàn)Java本地接口(JNI)是出于可移植性的考慮,當(dāng)然我們也可以設(shè)計(jì)出其它的本地接口來代替Sun公司的JNI。但是這些設(shè)計(jì)與實(shí)現(xiàn)是比較復(fù)雜的事情,需要確保垃圾回收器不會將那些正在被本地方法調(diào)用的對象釋放掉。
~:Jin+U$zE SI7Y0
"j1lJ`7Dd0v"v0Java的堆是一個(gè)運(yùn)行時(shí)數(shù)據(jù)區(qū),類的實(shí)例(對象)從中分配空間,它的管理是由垃圾回收來負(fù)責(zé)的:不給程序員顯式釋放對象的能力。Java不規(guī)定具體使用的垃圾回收算法,可以根據(jù)系統(tǒng)的需求使用各種各樣的算法。中文JAVA技術(shù)網(wǎng)'z/wgb.s
中文JAVA技術(shù)網(wǎng)\TMY[:H)Z#@ tr
按照題目要求編寫的Java程序如下
注意 請使用你的真實(shí)姓名和班級替換Test類中
創(chuàng)建Student對象stu時(shí)用的"張三"和"20計(jì)算機(jī)應(yīng)用01班"
import java.util.Scanner;
class Student{
private String name,classname;
private int starnum,scorenum;
private int[] scores;
public void setStarNum(int n){
this.starnum=n;
}
public Student(String name,String classname,int scorenum){
this.name=name;
this.classname=classname;
this.scorenum=scorenum;
}
public String getName(){
return this.name;
}
public void printStar(){
for(int i=0;istarnum;i++){
for(int j=0;j2*i+1;j++){
System.out.print("*");
}
System.out.println();
}
}
public void setScore(){
Scanner sc=new Scanner(System.in);
scores=new int[scorenum];
System.out.print("請輸入各科成績:");
for(int i=0;iscorenum;i++){
scores[i]=sc.nextInt();
}
}
public void showInfo(){
System.out.print(name+"同學(xué),你所在的班級是"+classname+",你各科考試成績分別為:");
for(int i=0;iscorenum;i++){
if(i==scorenum-1)
System.out.print(scores[i]);
else
System.out.print(scores[i]+",");
}
System.out.println();
}
public float getAvg(){
float sum=0;
for(int i=0;iscorenum;i++){
sum=sum+scores[i];
}
return sum/scorenum;
}
}
public class Test{
public static void main(String[] args){
Student stu=new Student("張三","20計(jì)算機(jī)應(yīng)用01班",5);
stu.setStarNum(4);
stu.printStar();
stu.setScore();
stu.showInfo();
if(stu.getAvg()60){
System.out.println(stu.getName()+"是不合格學(xué)生");
}else{
System.out.println(stu.getName()+"是個(gè)合格學(xué)生");
}
}
}
/*
* Question9.java
*
* Created on 2007年1月18日, 下午9:04
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package know;
/**
*
* @author Administrator
*/
public class Question9 {
public static void main(String args[]) {
StringBuffer str=new StringBuffer("ABCDEFG");
//【代碼1】 // 向str尾加“123456789”。
str.append("123456789");
System.out.println(str);
//【代碼2】 // 將str中的字符 ‘B’替換為‘b’。
str.replace(1,2,"b");
System.out.println(str);
//【代碼3】 // 在str中的“123456789”前面插入“Game”。
str.insert(7,"Game");
System.out.println(str);
int index= str.indexOf("1"); // 獲取str中首次出現(xiàn)“1”的位置。
//【代碼5】 // 刪除str中“1234”。
str.delete(11,15);
System.out.println(str);
int n = str.length();//【代碼6】 // 獲取str中字符個(gè)數(shù)。
//System.out.println(n);
//【代碼7】 // 將str中“789”替換為“七八九”。
str.replace(13,16,"七八九");
System.out.println(str);
/*
StringBuffer otherStr = new StringBuffer("we love you");
int start = 0;
char c = '\0';
while(start!=-1) {
if(start!=0) {
start=start+1;
}
c=otherStr.charAt(start);
if(Character.isLowerCase(c)) {
c=Character.toUpperCase(c);
otherStr.setCharAt(start,c);
}
start=otherStr.indexOf(" ",start); //查找下一個(gè)空格。
}
System.out.println(otherStr);
*/
StringBuffer yourStr=new StringBuffer("i Love THIS GaME");
//【代碼8】 // 將yourStr中的大寫字符替換為對應(yīng)的小寫字符,
// 小寫字符替換為對應(yīng)的大寫字符
char h = '\0';
for(int i = 0;i yourStr.length(); i++){
h = yourStr.charAt(i);
if(Character.isLowerCase(h))
h = Character.toUpperCase(h) ;
else
h = Character.toLowerCase(h);
yourStr.setCharAt(i,h);
}
System.out.println(yourStr);
}
}