跪求java代码读取txt文档中的数据 并判断正负 正数返回1 负数返回0 写入另一个txt文档中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跪求java代码读取txt文档中的数据 并判断正负 正数返回1 负数返回0 写入另一个txt文档中相关的知识,希望对你有一定的参考价值。
txt文档如下,数据还有很多,需要读取channel_A下面“-”前的数字,并且可以选择读取数据的周期,即隔几行读取。并判断正负 正数返回1 负数返回0 写入另一个txt文档中。麻烦各位高手帮帮忙啊,最好在关键的地方加上注释,本人java不太行。。。谢谢了!!!!!!!!!!!!
**************************************************************
Oscilloscope data: SCP
Time base: 0.014143 seconds per division
Time offset: 0.000000 seconds
Channel A sensitivity : 5.000000 volts per division
Channel A offset: 0.000000 volts
Channel A color: 32255
Channel B sensitivity : 2.000000 volts per division
Channel B offset: 0.000000 volts
Channel B color: 32255
Channel A connected: yes
Channel B connected: yes
Column 1 Time (S)
Column 2 Channel_A Voltage(V)
Column 3 Channel_B Voltage(V)
Time Channel_A Channel_B
--------------------------------------------
0.000000000000e+000 0.0000e+000 2.2032e-005
1.000000000000e-007 -4.3368e-019 2.2032e-005
2.000000000000e-007 -4.3368e-019 2.2032e-005
4.000000000000e-007 -8.6736e-019 2.2032e-005
8.000000000000e-007 -2.3852e-018 2.2032e-005
1.600000000000e-006 -5.9631e-018 2.2032e-005
3.200000000000e-006 -2.0383e-017 2.2032e-005
6.400000000000e-006 -6.2992e-017 2.2032e-005
1.280000000000e-005 -2.0524e-016 2.2032e-005
2.280000000000e-005 -6.9898e-016 2.2032e-005
3.280000000000e-005 -1.6258e-015 2.2032e-005
4.280000000000e-005 -3.0612e-015 2.2032e-005
5.280000000000e-005 -4.9637e-015 2.2032e-005
6.280000000000e-005 -7.2800e-015 2.2032e-005
。。。。。。
排版有问题。。。Channel_A的应该对正 0.0000e+000 的那列,读取判断e前面的数字,如第二行应读-4.3368
把源文件里面的每行数据用split分成3个String,再把第二个String用spli分成2个String,e前面的String转换成double进行判断,大于0就返回1,小于0就返回0,等于0就返回-1。
周期问题可以这样解决:
for(int i=0;i<iCyc+1;i++)//周期处理(iCyc就是周期数)
line=br.readLine();
【源文件格式】:
0.000000000000e+000 0.0000e+000 2.2032e-005
1.000000000000e-007 -4.3368e-019 2.2032e-005
2.000000000000e-007 -4.3368e-019 2.2032e-005
4.000000000000e-007 -8.6736e-019 2.2032e-005
8.000000000000e-007 -2.3852e-018 2.2032e-005
1.600000000000e-006 -5.9631e-018 2.2032e-005
3.200000000000e-006 -2.0383e-017 2.2032e-005
6.400000000000e-006 -6.2992e-017 2.2032e-005
1.280000000000e-005 -2.0524e-016 2.2032e-005
2.280000000000e-005 -6.9898e-016 2.2032e-005
3.280000000000e-005 -1.6258e-015 2.2032e-005
4.280000000000e-005 -3.0612e-015 2.2032e-005
5.280000000000e-005 -4.9637e-015 2.2032e-005
6.280000000000e-005 -7.2800e-015 2.2032e-005
【结果文件】:
-1
1
1
1
1
1
1
1
1
1
1
1
1
1
【代码】:
package Exam;
import java.io.*;
/**
*
* @author hujie0619jay@sina.com
* Mar 29, 20106:41:59 PM
*/
public class Exam_TxtDisposal
public static void main(String[] args)
Exam_TxtDisposal ed=new Exam_TxtDisposal();
String file1="f:\\111.txt";//读取的文件
String file2="f:\\222.txt";//写入的文件
ed.txtDisposal(file1, file2,0);
public void txtDisposal(String file1,String file2,int iCyc)//文件读写[源文件,结果文件,周期]
try
FileReader fr=new FileReader(file1);//读文件
BufferedReader br=new BufferedReader(fr);
FileWriter fw=new FileWriter(file2);//写文件
PrintWriter pw=new PrintWriter(fw);
String line;
line=br.readLine();//按行读取
while(line!=null)
int iNum=workedLine(line);
pw.println(iNum);//按行写入
for(int i=0;i<iCyc+1;i++)//周期处理
line=br.readLine();
pw.close();fw.close();
br.close();fr.close();
catch(FileNotFoundException e)
e.printStackTrace();
catch(IOException e)
e.printStackTrace();
System.out.println("==处理完毕!==");
public int workedLine(String line)//判断数字的正负
//每一行的格式:1.000000000000e-007 -4.3368e-019 2.2032e-005
String[] sLine1=line.split(" ");//把line分成3个String
String[] sLine2=sLine1[1].split("e");//把Channel_A分成2个String
double dNum=Double.valueOf(sLine2[0]);
if(dNum>0) return 1;//正数
if(dNum<0) return 0;//负数
return -1;//零
参考技术A 排版有问题。。。Channel_A的应该对正 0.0000e+000 的那列,读取判断e前面的数字,如第二行应读-4.3368 参考技术B 选择读取数据的周期?这个用来干 嘛,对输出 结果有影响么?
求高手点拨:一个Java的“IO读取txt文件中的数据”的问题.
高手,您好:
请问:
如果将一个存储在操作系统的txt文件中的一个整型常量进行“向内存中读取”的代码书写的话,用Java语言来做,落实到代码上,应该怎么写...?
希望高手能够落实到代码之上...
谢谢高手的相助!!
15分奉上!!
一、多种方式读文件内容。
1、按字节读取文件内容
2、按字符读取文件内容
3、按行读取文件内容
4、随机读取文件内容
Java代码
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
import java.io.Reader;
public class ReadFromFile
public static void readFileByBytes(String fileName)
File file = new File(fileName);
InputStream in = null;
try
System.out.println("以字节为单位读取文件内容,一次读一个字节:");
// 一次读一个字节
in = new FileInputStream(file);
int tempbyte;
while ((tempbyte = in.read()) != -1)
System.out.write(tempbyte);
in.close();
catch (IOException e)
e.printStackTrace();
return;
try
System.out.println("以字节为单位读取文件内容,一次读多个字节:");
// 一次读多个字节
byte[] tempbytes = new byte[100];
int byteread = 0;
in = new FileInputStream(fileName);
ReadFromFile.showAvailableBytes(in);
// 读入多个字节到字节数组中,byteread为一次读入的字节数
while ((byteread = in.read(tempbytes)) != -1)
System.out.write(tempbytes, 0, byteread);
catch (Exception e1)
e1.printStackTrace();
finally
if (in != null)
try
in.close();
catch (IOException e1)
public static void readFileByChars(String fileName)
File file = new File(fileName);
Reader reader = null;
try
System.out.println("以字符为单位读取文件内容,一次读一个字节:");
// 一次读一个字符
reader = new InputStreamReader(new FileInputStream(file));
int tempchar;
while ((tempchar = reader.read()) != -1)
// 对于windows下,\r\n这两个字符在一起时,表示一个换行。
// 但如果这两个字符分开显示时,会换两次行。
// 因此,屏蔽掉\r,或者屏蔽\n。否则,将会多出很多空行。
if (((char) tempchar) != '\r')
System.out.print((char) tempchar);
reader.close();
catch (Exception e)
e.printStackTrace();
try
System.out.println("以字符为单位读取文件内容,一次读多个字节:");
// 一次读多个字符
char[] tempchars = new char[30];
int charread = 0;
reader = new InputStreamReader(new FileInputStream(fileName));
// 读入多个字符到字符数组中,charread为一次读取字符数
while ((charread = reader.read(tempchars)) != -1)
// 同样屏蔽掉\r不显示
if ((charread == tempchars.length)
&& (tempchars[tempchars.length - 1] != '\r'))
System.out.print(tempchars);
else
for (int i = 0; i < charread; i++)
if (tempchars[i] == '\r')
continue;
else
System.out.print(tempchars[i]);
catch (Exception e1)
e1.printStackTrace();
finally
if (reader != null)
try
reader.close();
catch (IOException e1)
public static void readFileByLines(String fileName)
File file = new File(fileName);
BufferedReader reader = null;
try
System.out.println("以行为单位读取文件内容,一次读一整行:");
reader = new BufferedReader(new FileReader(file));
String tempString = null;
int line = 1;
// 一次读入一行,直到读入null为文件结束
while ((tempString = reader.readLine()) != null)
// 显示行号
System.out.println("line " + line + ": " + tempString);
line++;
reader.close();
catch (IOException e)
e.printStackTrace();
finally
if (reader != null)
try
reader.close();
catch (IOException e1)
public static void readFileByRandomAccess(String fileName)
RandomAccessFile randomFile = null;
try
System.out.println("随机读取一段文件内容:");
// 打开一个随机访问文件流,按只读方式
randomFile = new RandomAccessFile(fileName, "r");
// 文件长度,字节数
long fileLength = randomFile.length();
// 读文件的起始位置
int beginIndex = (fileLength > 4) ? 4 : 0;
// 将读文件的开始位置移到beginIndex位置。
randomFile.seek(beginIndex);
byte[] bytes = new byte[10];
int byteread = 0;
// 一次读10个字节,如果文件内容不足10个字节,则读剩下的字节。
// 将一次读取的字节数赋给byteread
while ((byteread = randomFile.read(bytes)) != -1)
System.out.write(bytes, 0, byteread);
catch (IOException e)
e.printStackTrace();
finally
if (randomFile != null)
try
randomFile.close();
catch (IOException e1)
private static void showAvailableBytes(InputStream in)
try
System.out.println("当前字节输入流中的字节数为:" + in.available());
catch (IOException e)
e.printStackTrace();
public static void main(String[] args)
String fileName = "C:/temp/newTemp.txt";
ReadFromFile.readFileByBytes(fileName);
ReadFromFile.readFileByChars(fileName);
ReadFromFile.readFileByLines(fileName);
ReadFromFile.readFileByRandomAccess(fileName);
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
import java.io.Reader;
public class ReadFromFile
public static void readFileByBytes(String fileName)
File file = new File(fileName);
InputStream in = null;
try
System.out.println("以字节为单位读取文件内容,一次读一个字节:");
// 一次读一个字节
in = new FileInputStream(file);
int tempbyte;
while ((tempbyte = in.read()) != -1)
System.out.write(tempbyte);
in.close();
catch (IOException e)
e.printStackTrace();
return;
try
System.out.println("以字节为单位读取文件内容,一次读多个字节:");
// 一次读多个字节
byte[] tempbytes = new byte[100];
int byteread = 0;
in = new FileInputStream(fileName);
ReadFromFile.showAvailableBytes(in);
// 读入多个字节到字节数组中,byteread为一次读入的字节数
while ((byteread = in.read(tempbytes)) != -1)
System.out.write(tempbytes, 0, byteread);
catch (Exception e1)
e1.printStackTrace();
finally
if (in != null)
try
in.close();
catch (IOException e1)
public static void readFileByChars(String fileName)
File file = new File(fileName);
Reader reader = null;
try
System.out.println("以字符为单位读取文件内容,一次读一个字节:");
// 一次读一个字符
reader = new InputStreamReader(new FileInputStream(file));
int tempchar;
while ((tempchar = reader.read()) != -1)
// 对于windows下,\r\n这两个字符在一起时,表示一个换行。
// 但如果这两个字符分开显示时,会换两次行。
// 因此,屏蔽掉\r,或者屏蔽\n。否则,将会多出很多空行。
if (((char) tempchar) != '\r')
System.out.print((char) tempchar);
reader.close();
catch (Exception e)
e.printStackTrace();
try
System.out.println("以字符为单位读取文件内容,一次读多个字节:");
// 一次读多个字符
char[] tempchars = new char[30];
int charread = 0;
reader = new InputStreamReader(new FileInputStream(fileName));
// 读入多个字符到字符数组中,charread为一次读取字符数
while ((charread = reader.read(tempchars)) != -1)
// 同样屏蔽掉\r不显示
if ((charread == tempchars.length)
&& (tempchars[tempchars.length - 1] != '\r'))
System.out.print(tempchars);
else
for (int i = 0; i < charread; i++)
if (tempchars[i] == '\r')
continue;
else
System.out.print(tempchars[i]);
catch (Exception e1)
e1.printStackTrace();
finally
if (reader != null)
try
reader.close();
catch (IOException e1)
public static void readFileByLines(String fileName)
File file = new File(fileName);
BufferedReader reader = null;
try
System.out.println("以行为单位读取文件内容,一次读一整行:");
reader = new BufferedReader(new FileReader(file));
String tempString = null;
int line = 1;
// 一次读入一行,直到读入null为文件结束
while ((tempString = reader.readLine()) != null)
// 显示行号
System.out.println("line " + line + ": " +tempString);
line++;
reader.close();
catch (IOException e)
e.printStackTrace();
finally
if (reader != null)
try
reader.close();
catch (IOException e1)
public static void readFileByRandomAccess(String fileName)
RandomAccessFile randomFile = null;
try
System.out.println("随机读取一段文件内容:");
// 打开一个随机访问文件流,按只读方式
randomFile = new RandomAccessFile(fileName, "r");
// 文件长度,字节数
long fileLength = randomFile.length();
// 读文件的起始位置
int beginIndex = (fileLength > 4) ? 4 : 0;
// 将读文件的开始位置移到beginIndex位置。
randomFile.seek(beginIndex);
byte[] bytes = new byte[10];
int byteread = 0;
// 一次读10个字节,如果文件内容不足10个字节,则读剩下的字节。
// 将一次读取的字节数赋给byteread
while ((byteread = randomFile.read(bytes)) != -1)
System.out.write(bytes, 0, byteread);
catch (IOException e)
e.printStackTrace();
finally
if (randomFile != null)
try
randomFile.close();
catch (IOException e1)
private static void showAvailableBytes(InputStream in)
try
System.out.println("当前字节输入流中的字节数为:" + in.available());
catch (IOException e)
e.printStackTrace();
public static void main(String[] args)
String fileName = "C:/temp/newTemp.txt";
ReadFromFile.readFileByBytes(fileName);
ReadFromFile.readFileByChars(fileName);
ReadFromFile.readFileByLines(fileName);
ReadFromFile.readFileByRandomAccess(fileName);
参考技术A java读文件主要分按字节读和按字符读,所以取决于文件的存储方式。按您的意思,txt文件中通常是字符,所以就按字符来读取,按字节可能会涉及到编码问题。我写上关键代码作为参考:
//读入文件
FileReader reader = new FileReader(new File("here is the file path.")) ;
StringBuffer sb = new StringBuffer() ;
int r ;
//读取字符,并存入缓存中
while (r = reader.read() != -1)
sb.append(char(r)) ;
reader.close() ;
//把所有字符组成的字符串转化成数字
int finInt = Integer.parseInt(sb.toString()) ;
是这个意思吗?可以商量
以上是关于跪求java代码读取txt文档中的数据 并判断正负 正数返回1 负数返回0 写入另一个txt文档中的主要内容,如果未能解决你的问题,请参考以下文章
java 用字符串实现加减法 包括两位小数 金额格式化 可以为正负 跪求!!!!!!