如何在java中的特定位置写入文本文件?
我试图创建一个文本文件,在该文本文件中,我有不同大小的不同列,我必须在该文件中相应地写入, 我试过那样做。。。。。 但是我不知道如何定义每列的大小,例如,我想要大小不小于30的位置,而不是大于30的位置,我如何才能做到这一点如何在java中的特定位置写入文本文件?,java,text,file-io,Java,Text,File Io,我试图创建一个文本文件,在该文本文件中,我有不同大小的不同列,我必须在该文件中相应地写入, 我试过那样做。。。。。 但是我不知道如何定义每列的大小,例如,我想要大小不小于30的位置,而不是大于30的位置,我如何才能做到这一点 BufferedWriter bw = null; try { String none=" "; DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); D
BufferedWriter bw = null;
try {
String none=" ";
DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
Date date = new Date();
int no_of_files=01;
String line1 = "H"+StringUtils.rightPad(none,9)+dateFormat.format(date)+StringUtils.rightPad(none,8)+" "+no_of_files+StringUtils.rightPad(none,10)+StringUtils.rightPad(none,290);
String line2 =StringUtils.rightPad("CID",10)+StringUtils.rightPad("Location",30)+StringUtils.rightPad("DateSF",8)+StringUtils.rightPad("DateST",8)+StringUtils.rightPad("BillAmt",10)+StringUtils.rightPad("BR",2)+StringUtils.rightPad("PDF FileName",260);
File file = new File("D:\\write.txt");
bw = new BufferedWriter(new FileWriter(file));
bw.write(line1);
bw.newLine();
bw.write(line2);
// writer.write(line2);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bw != null) {
bw.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}我将研究如何从Commons IO使用此函数来帮助保持每列的长度相同
我制作了一个小框架,让您可以在spring文件中定义布局:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="merchantNumber" class="com.xxx.io.Field">
<property name="name"><value>merchantNumber</value></property>
<property name="length"><value>8</value></property>
<property name="scale"><value>0</value></property>
<property name="type"><value>7</value></property>
<property name="index"><value>1</value></property>
</bean>
<bean id="merchantName" class="com.xxx.io.Field">
<property name="name"><value>merchantName</value></property>
<property name="length"><value>40</value></property>
<property name="scale"><value>0</value></property>
<property name="type"><value>2</value></property>
<property name="index"><value>2</value></property>
</bean>
}您尝试过什么,面临什么问题?有关起点,请参阅教程。@Jimmt如果是呢?标记已经失效,所有的问题都将被一视同仁。@Abhi我从未做过类似的事情,所以不知道从哪里开始??您需要在xml文件中定义字段,并在spring文件中定义recordLayout。完成后,您需要创建一个进程,该进程将获取bean并将其设置在recordLayout对象=>aRecrdLayoutObject.getFieldmerchantNumber.setValuemy.bean.getMerchantNumber;完成后,您可以使用recordLayout.toStream,它按照spring文件中定义的顺序写入字段,并将它们写入一个文件中。嘿,我不使用spring,请告诉我不同的方式……您需要了解Java的基础知识。没有时间教。。。sorryHey你能给我发源代码吗?你能给我一个开头吗?一旦你知道每列的大小,你就可以用你想输入的值和列的大小调用这个函数。我面临的问题是如何设置列的大小一旦设置完成,对我来说会很容易,我是java新手,这就是为什么要问这个问题,对不起
<bean id="marchandLayout" class="com.xxx.MarchandLayout" >
<property name="fields">
<bean class="java.util.HashMap">
<constructor-arg>
<map>
<entry>
<key><value>merchantNumber</value></key>
<ref bean="merchantNumber"/>
</entry>
<entry>
<key><value>merchantName</value></key>
<ref bean="merchantName"/>
</entry>
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.TreeSet;
public class RecordLayout {
private HashMap fields;
private static final int SEVENTY = 70;
/**
* Constructeur
*/
public RecordLayout() {
fields = new HashMap();
}
/**
* @param aField
* le champ à ajouter dans le HashMap
*/
protected void addField(final Field aField) {
fields.put(aField.getName(), aField);
}
/**
* Methode qui retourne un objet de type Field en passant en parametre le
* nom du champ.
*
* @param aFieldName
* le nom de l'objet à récuperer
* @return un objet de type Field
* @throws FieldException
* si le Field n'est pas trouvable dans le HashMap, on retourne
* une exception
*/
public Field getField(final String aFieldName) throws FieldException {
Field field = (Field) fields.get(aFieldName);
if (field == null) {
throw new FieldException("Field " + aFieldName + " n'existe pas dans le layout");
}
return field;
}
/**
* méthode qui retourne un iterator contenant une collection d'objet de type
* Field en fonction de l'ordre basé sur le champ de l'index de l'objet
*
* @see Field.getIndex()
* @see Field.compareTo()
* @return un iterator
*/
protected Iterator getOrderedFieldIterator() {
TreeSet structureTreeSet = new TreeSet(fields.values());
return structureTreeSet.iterator();
}
/**
* Retourne la valeur de l'objet Field
*
* @param aFieldName
* le nom du champ à recherché.
* @return retourne l'objet qui contient la valeur. String, BigDecimal
* @throws FieldException
* si le champ n'existe pas, une exception est lancée.
*/
public Object getValue(final String aFieldName) throws FieldException {
return getField(aFieldName).getValue();
}
/**
* Cette méthode assigne une valeur à un objet.
*
* @param aName
* le nom de l'objet, le Field
* @param aValue
* la valeur à assigner au Field
* @throws FieldException
* si le Field n'existe pas.
*/
public void setValue(final String aName, final Object aValue) throws FieldException {
getField(aName).setValue(aValue);
}
/**
* Cette méthode prend la valeur des champs, en fonction de l'ordre des
* champs et parcours les valeurs et les mets dans un stream.
*
* @return un stream contenant les données des objets comme dans un layout
* de fichier plat.
* @throws Exception
* si une exception arrive lors de la transformation
*/
public ByteArrayOutputStream toByteArray() throws Exception {
ByteArrayOutputStream anOutputStream;
try {
anOutputStream = new ByteArrayOutputStream(SEVENTY);
toStream(anOutputStream);
} catch (IOException e) {
throw new Exception("Unexpected at the toByte Creation ");
}
return anOutputStream;
}
/**
* Méthode qui itère sur la collection et qui appelle la transformation des
* valeurs objets en objets String
*
* @param anOutputStream
* le stream contenant les valeurs
* @throws FieldException
* Si une erreur survient au niveau des champs
* @throws IOException
* si une erreur survient au niveau du stream.
*/
public void toStream(final OutputStream anOutputStream) throws FieldException, IOException {
Iterator iterator;
iterator = getOrderedFieldIterator();
while (iterator.hasNext()) {
Field field = (Field) iterator.next();
field.toStream(anOutputStream);
}
}
/**
* Méthode qui prend un inputStream et qui crée les objets
*
* @param message
* le contenu du stream
* @throws FieldException
* si une erreur de Field survient
* @throws IOException
* si une erreur survient au niveau du stream.
*/
public void buildFromStream(final InputStream message) throws FieldException, IOException {
Iterator iterator;
iterator = getOrderedFieldIterator();
while (iterator.hasNext()) {
((Field) iterator.next()).initializeFrom(message);
}
}
/**
* @see java.lang.Object#toString()
* @return String rprésentation
*/
public String toString() {
StringBuffer sb = new StringBuffer();
Iterator it = getOrderedFieldIterator();
while (it.hasNext()) {
Field f = (Field) it.next();
sb.append(f.getName() + " = [" + f.getValue() + "]\n");
}
return sb.toString();
}
/**
* @return le HashMap contenant les champs
*/
public HashMap getFields() {
return fields;
}
/**
* @param map
* à setter
*/
public void setFields(final HashMap map) {
fields = map;
}