BufferedWriter添加了太多行?

时间:2017-04-02 10:48:25

标签: java string file bufferedwriter

我想问一下,如果有一个更好的解决方案,而不是使用StringBuilder来削减String的某些部分,这是从一个方法通过BufferedWriter解析为一个文件?

如果没有StringBuilder,文件中会有很多字符串,其余字符串会发生什么?data-nirvana?

  class TaskStartPart {
   public void calculHash() throws InterruptedException, IOException,  NoSuchAlgorithmException {
    try {   
     DigestInputStream digestInputStream=null ;
     MessageDigest messageDigest=MessageDigest.getInstance("SHA-512") ;
     digestInputStream=new DigestInputStream(new TaskPart(new   File("C:\\Users\\win7p\\Documents/t")),messageDigest) ;
    while(digestInputStream.read()>=0) ;
     for(byte b: messageDigest.digest()) {
      hexRes2 += String.format("%02x",b);
     } sb = new StringBuilder(hexRes2);  //StringBuilder which adjust the string to be parsed
     dateiSpeichern(0,0,sb.substring(hexRes2.length() -  128,hexRes2.length())); System.out.println(sb.substring(hexRes2.length() - 128,hexRes2.length()));
        digestInputStream.close();
      } catch (IOException ex ) {ex.printStackTrace();}       
     }
    }   

  class TaskPart extends InputStream {  
    private File mFile ;
    private List<File> mFiles ;
    private InputStream mInputStream ;

   public TaskPart(File file) throws FileNotFoundException {
    mFile=file ;
    if(file.isDirectory()) {
    mFiles=new ArrayList<File>(Arrays.asList(file.listFiles())) ;
    Collections.sort(mFiles) ;
    mInputStream=nextInputStream() ;
   } else {
     mFiles=new ArrayList<File>() ;
     mInputStream=new FileInputStream(file) ;
   }
  }

  @Override
  public int read() throws IOException {
   int result=mInputStream==null?-1:mInputStream.read() ;
   if(result<0 && (mInputStream=nextInputStream())!=null)
    return read() ;
    else return result ;
   }

   protected String getRelativePath(File file) {
   return   file.getAbsolutePath().substring(mFile.getAbsolutePath().length()) ;
   }

   protected InputStream nextInputStream() throws FileNotFoundException {
    if(!mFiles.isEmpty()) {
     File nextFile=mFiles.remove(0) ;
    return new SequenceInputStream(
    new ByteArrayInputStream(getRelativePath(nextFile).getBytes()),
    new TaskPart(nextFile)) ;
   }
   else return null ;
  }
 }

  private void dateiSpeichern(int i1, int i2, String hexR) throws  InterruptedException, IOException {
   try { 
    String tF = new SimpleDateFormat("dd-MM-yyyy HH-mm-ss").format(new   Date().getTime());
   try (BufferedWriter writer = new BufferedWriter(new FileWriter("C:\\Users\\win7p\\Documents/hashLog.txt", true))) {
   writer.append(tF);
   writer.newLine();
   writer.append(dtf);
   writer.newLine();
   writer.append("Hash Value: ");
   writer.append(hexR); //without StringBuilder I would have much //strings added next to eachone line by line
 } //normal here is also a catch code.

1 个答案:

答案 0 :(得分:1)

确实需要StringBuilder,因为您只需加载一个String然后只需取出子串< / em>来自它。

您可以使用String#substring方法。

在两种情况下,垃圾收集都会处理无法访问的对象

StringBuilder适用于构建一个String,并且本质上是一个可变字符缓冲区,当你想要多次改变一个字符串(这不是你的情况)。