如何在java中的特定位置写入文本文件?

如何在java中的特定位置写入文本文件?,java,text,file-io,Java,Text,File Io,我试图创建一个文本文件,在该文本文件中,我有不同大小的不同列,我必须在该文件中相应地写入, 我试过那样做。。。。。 但是我不知道如何定义每列的大小,例如,我想要大小不小于30的位置,而不是大于30的位置,我如何才能做到这一点 BufferedWriter bw = null; try { String none=" "; DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); D

我试图创建一个文本文件,在该文本文件中,我有不同大小的不同列,我必须在该文件中相应地写入, 我试过那样做。。。。。 但是我不知道如何定义每列的大小,例如,我想要大小不小于30的位置,而不是大于30的位置,我如何才能做到这一点

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;
}