import java.io.*;//读取含十六进制码的文本文件
class ReadHex{
private String textName;
private String hex;
public ReadHex(String textNameIn){
textName=textNameIn;
this.readHex();
} private void readHex(){
try{
FileReader fr=new FileReader(textName);
BufferedReader br=new BufferedReader(fr);
boolean off=false;
while(!off){
String hextemp=br.readLine();
if(hextemp==null)
off=true;
else
hex=hex+hextemp;
}
br.close();
}catch(IOException e){
System.out.println("Error - "+e.toString());
}
}//返回得到的字符串
public String getHex(){
return hex;
}
}//将十六进制码转换为十进制
class ConHex{
private String hex;
private int[] out; public ConHex(String hexIn){
hex=hexIn;
this.conHex();
}
private void conHex(){
try{
for(int i=0;i+1<hex.length();i+=2){
String sub=hex.substring(i,i+2);
out[i]=Integer.parseInt(sub,16);
}
}catch(Exception e){
System.out.println("Error - "+e.getMessage());
}
}
//返回十进制数组
public int[] getOut(){
return out;
}
}//输出十进制数
public class HexConverter{
public static void main(String[] args){ ReadHex rh=new ReadHex(args[0]);
ConHex ch=new ConHex(rh.getHex());
int[] outPut=ch.getOut();
for(int i=0;i<outPut.length;i++){
System.out.print(outPut[i]+" ");
}
}
}请看看这程序哪有问题啊,怎么运行时就出异常
class ReadHex{
private String textName;
private String hex;
public ReadHex(String textNameIn){
textName=textNameIn;
this.readHex();
} private void readHex(){
try{
FileReader fr=new FileReader(textName);
BufferedReader br=new BufferedReader(fr);
boolean off=false;
while(!off){
String hextemp=br.readLine();
if(hextemp==null)
off=true;
else
hex=hex+hextemp;
}
br.close();
}catch(IOException e){
System.out.println("Error - "+e.toString());
}
}//返回得到的字符串
public String getHex(){
return hex;
}
}//将十六进制码转换为十进制
class ConHex{
private String hex;
private int[] out; public ConHex(String hexIn){
hex=hexIn;
this.conHex();
}
private void conHex(){
try{
for(int i=0;i+1<hex.length();i+=2){
String sub=hex.substring(i,i+2);
out[i]=Integer.parseInt(sub,16);
}
}catch(Exception e){
System.out.println("Error - "+e.getMessage());
}
}
//返回十进制数组
public int[] getOut(){
return out;
}
}//输出十进制数
public class HexConverter{
public static void main(String[] args){ ReadHex rh=new ReadHex(args[0]);
ConHex ch=new ConHex(rh.getHex());
int[] outPut=ch.getOut();
for(int i=0;i<outPut.length;i++){
System.out.print(outPut[i]+" ");
}
}
}请看看这程序哪有问题啊,怎么运行时就出异常
E:\trto\java>java HexConverter abc.dat
Error - For input string: "nu"
Exception in thread "main" java.lang.NullPointerExce
at HexConverter.main(HexConverter.java:71)
麻烦了
这个文件里面就一排数
000A110D1D26021978700F1318141E0C6A197D45B0FFFFFF
:java Hex abc.dat
null000A110D1D26021978700F1318141E0C6A197D45B0FFFFFFimport java.io.*;class ReadHex{
private String textName;
private String hex;
public ReadHex(String textNameIn){
textName=textNameIn;
this.readHex();
} private void readHex(){
try{
FileReader fr=new FileReader(textName);
BufferedReader br=new BufferedReader(fr);
boolean iof=false;
while(!iof){
String hextemp=br.readLine();
if(hextemp==null)
iof=true;
else
hex=hex+hextemp;
}
br.close();
}catch(IOException e){
System.out.println("Error - "+e.toString());
}
}//返回得到的字符串
public String getHex(){
return hex;
}
}public class Hex{
static String hexOut="";
public static void main(String[] args){
ReadHex rh=new ReadHex(args[0]);
hexOut=rh.getHex();
System.out.println(hexOut);
}
}
其次,private int[] out; 这个int数据没初始化就往里面放东西。这不该犯的错误。注意初始化。
还有out[i] = Integer.parseInt(sub, 16); i每次都+2,这个数组存放的结果也肯定是每隔一个有一个你要的数据。
package com.chang.test;import java.io.*;//读取含十六进制码的文本文件
class ReadHex {
private String textName;
//首先在这把 hex 初始化为空。
private String hex = ""; public ReadHex(String textNameIn) {
textName = textNameIn;
this.readHex();
} private void readHex() {
try {
FileReader fr = new FileReader(textName);
BufferedReader br = new BufferedReader(fr);
boolean off = false;
while (!off) {
String hextemp = br.readLine();
if (hextemp == null)
off = true;
else
hex = hex + hextemp;
}
br.close();
} catch (IOException e) {
System.out.println("Error - " + e.toString());
}
} // 返回得到的字符串
public String getHex() {
return hex;
}
}// 将十六进制码转换为十进制
class ConHex {
private String hex;
private int[] out; public ConHex(String hexIn) {
hex = hexIn;
this.conHex();
} private void conHex() {
//在这把 out 初始化。
int temp = hex.length()/2 + 1;
out = new int[temp];
//用j来表示数组的下标,i 每次都是在加 2,不能用来当作数据out的下标。
int j = 0;
try {
//如果是基数,则要判断 == 的情况。
for (int i = 0; i + 1 <= hex.length(); i += 2) {
String sub = "";
if(i + 1 == hex.length()) {
//这个地方取到一个16进制数,看你想怎么判断了。可以在前面加0,或这在后面加0;默认前面加0。
sub = hex.substring(i, i + 1);
} else {
sub = hex.substring(i, i + 2);
}
out[j] = Integer.parseInt(sub, 16);
//j++ 数据下标。
j++;
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("Error - " + e.getMessage());
}
} // 返回十进制数组
public int[] getOut() {
return out;
}
}// 输出十进制数
public class HexConverter {
public static void main(String[] args) {
ReadHex rh = new ReadHex(args[0]);
ConHex ch = new ConHex(rh.getHex());
int[] outPut = ch.getOut();
for (int i = 0; i < outPut.length; i++) {
System.out.print(outPut[i] + " ");
}
}
}