java使用文件流实现查看下载次数

本文实例为大家分享了java使用文件流实现查看下载次数的具体代码,供大家参考,具体内容如下

需求:点击一个按钮的次数或者是展示文件,游戏被下载的次数

实现:开辟一个流文件,用来保存被下载的次数,然后读文件中value,点击一次value加1,再将此value保存到流文件中。
三种方法:

package cn.tr.test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;

public class TestDemo {

  private static int in ;
  private static File file;

  public static void main(String[] args) {

    fun2();
  }

  public static void fun(){
    /** 初始化文件中的值为0*/
    try {
      OutputStream out = new FileOutputStream(file);
      String str = "00";
      out.write(str.getBytes());
      out.close();
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

  }
  public static void fun2() {

    file= new File("d:/test/d.txt");
    if (!file.exists()) {
      try {
        file.createNewFile();
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
    try {
      /** 读取文件中的内容 */
      if (file.exists()&&file.length()==0) {
        fun();
      }
      InputStream is = new FileInputStream(file);
      byte b[] = new byte[(int) file.length()];
      for (int i = 0; i < b.length; i++) {
        // 值字节在0-255 范围之内是作为int 来返回的
        b[i] = (byte) is.read();
      }
      in =Integer.parseInt(new String(b));
      in++;
      System.out.println("读出来的"+in);

      /**再写入到文件中 */
      OutputStream out = new FileOutputStream(file);
      String str = String.valueOf(in);
      byte[] bytes = str.getBytes();
      for (int i = 0; i < bytes.length; i++) {
        out.write(bytes[i]);  // 一个字节一个字节的写入
      }
      is.close();
      out.close();
      System.out.println("写入的"+in);

    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  public static void fun3(){

    file= new File("d:/test/d.txt");
    if (!file.exists()) {
      try {
        file.createNewFile();
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
    /** 先读出来*/
    try {
      if (file.exists()&&file.length()==0) {
        fun();
      }
      Reader reader = new FileReader(file);
      char[] c = new char[(int)file.length()];
      int temp = 0;
      int len =0;
      while((temp=reader.read()) != -1){
        c[len]=(char)temp;
        len++;
      }
      reader.close();
      System.out.println("初始值"+new String(c,0,len));
      in =Integer.parseInt(new String(c,0,len));
      in++;
      System.out.println("下载一次:"+in);
    /** 再写进去*/
      Writer writer = new FileWriter(file);
      writer.write(in+"");
      writer.close();
      System.out.println("再写进去:"+in);
    } catch (FileNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }

  public static void fun4(){
    Reader reader;
    Writer writer;
    file= new File("d:/test/d.txt");
    if (!file.exists()) {
      try {
        file.createNewFile();
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
    try {
      if (file.exists()&&file.length()==0) {
        fun();
      }
      /** 读出来*/
      reader = new FileReader(file);
      BufferedReader br = new BufferedReader(reader);
      char [] c = new char[(int)file.length()];
      int len = 0;
      int temp = 0;
      while((temp=br.read())!= -1){
        c[len]=(char)temp;
        len++;
      }

      in =Integer.parseInt(new String(c, 0, len));
      in++;
      System.out.println("读出来:"+ in);
      /** 写进去*/
      writer =new FileWriter(file);
      BufferedWriter bw = new BufferedWriter(writer);
      bw.write(in+"");
      System.out.println("写进去:"+in);
      br.close();
      bw.close();
    } catch (FileNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

  }  

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java输入输出流实例详解

    本文实例讲述了Java输入输出流.分享给大家供大家参考,具体如下: 字节输出流,输出到文件中(写) OutputStream抽象类 选好文件 复制代码 代码如下: File file = new File("E:" + File.separator + "myFile" + File.separator + "test" + File.separator + "123.txt"); 子类实例化,需要抛异常 稍后传输的数据覆盖原

  • java使用缓冲流复制文件的方法

    本文实例为大家分享了java使用缓冲流复制文件的具体代码,供大家参考,具体内容如下 [1] 程序设计 /*------------------------------- 1.缓冲流是一种处理流,用来加快节点流对文件操作的速度 2.BufferedInputStream:输入缓冲流 3.BufferedOutputStream:输出缓冲流 4.在正常的Java开发中都使用缓冲流来处理文件,因为这样可以提高文件处理的效率 5.这里设计程序:使用缓冲流复制一个较大的视频文件 -------------

  • Java实现文件和base64流的相互转换功能示例

    本文实例讲述了Java实现文件和base64流的相互转换功能.分享给大家供大家参考,具体如下: import java.io.FileInputStream; import java.io.FileOutputStream; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; /** * 文件与base64的互相转换操作 */ public class testFile { public static void main(S

  • Java中流的有关知识点详解

    什么是流? 流:程序和设备之间连接起来的一根用于数据传输的管道,流就是一根管道. 流的分类: 四大基本抽象流(输入流,输出流,字符流,字节流) 文件流 缓冲流 转换流 数据流     流一定是类,但类不一定是流 print流 object流 按数据流的方向不同可以分为输入流和输出流. 按处理数据单位不同可以分为字节流和字符流.(一个字符是两个字节) 按功能不同可以分为节点(原始)流和处理(包裹)流. 字节流         字符流 输入流      InputStream      Reader

  • 浅谈JAVA工作流的优雅实现方式

    今天查找线上问题,看到一个让我脑洞大开的工作流实现方式.以前用过责任链模式,也用过模板模式实现类工作流的方式,但是对比这个工具,逊色不少,不卖关子了,就是Apache Commons Chain,它是Command模式与责任链模式的综合体. 1.Apache Commons Chain 中的角色有:chain.context.command. 2.在我们订单系统有这样的业务,就是退票的时候,会根据核损后的订单价格,给客人退钱,但是订单的金额,由几部分组成 有现金.商旅卡.有优惠券.所以根据需求,

  • Java内部类及其特点的讲解

    定义在类里面的类就叫做内部类. 内部类的特点: 在内部类中可以直接访问外部类的成员,包括私有的成员 在外部类中不能直接访问内部类的成员,必须通过创建内部类的对象来调用内部类成员 如何创建内部类对象: 内部类名 对象名= new 内部类名(); 对象名.成员名    但是私有化的东西还是不能访问的 可以修饰内部类的修饰符有哪些: private   static 如果通过private 修饰 ,只能在外部类中提供公共的方法对内部类进行访问 如果是static 修饰,如何创建外部类对象 外部类名.内

  • Java中FileOutputStream流的write方法

    本文为大家分享了FileOutputStream流的write方法,供大家参考,具体内容如下 /*------------------------ FileOutputStream: ....//输出流,字节流 ....//write(byte[] b)方法: 将b.length个字节从指定字节数组写入此文件输出流中 ....//write(byte[] b, int off, int len)方法:将指定字节数组中从偏移量off开始的len个字节写入此文件输出流 ---------------

  • JavaScript两种计时器的实例讲解

    通过使用 JavaScript,我们有能力做到在一个设定的时间间隔之后来执行代码,而不是在函数被调用后立即执行.我们称之为计时事件.提供了两种计时器的方法如下: window.setInterval(): 这个方法就是在一个周期内反复执行一直到窗口关闭或者 clearInterval() window.setTimeout(); 延迟执行内容 setInterval()的使用方法: setInterval(code,millisec); code:可以是方法名,如果是方法不要加小括号.同时也可以

  • JavaScript之解构赋值的理解

    1. ES6的新特性 允许将对象或者数组'分解'成多个单独的值, 以对象的解构开始. 代码示例 2. 说明 1).  定义一个对象 const obj={b:2,c:3,d:4}; 此时系统中没有变量b, 变量c与变量d 2). 开始解构该对象, const {a,b,c} = obj 这句话的意思是, 定义a,b,c三个变量, 然后在obj对象中寻找a,b,c变量, 如果找到, 则赋值给对应的变量 所以, a, 已定义, 但是未赋值. 定义是在const{a,b,c}中定义的, 而没有在obj

  • Java8的default和static关键字的使用讲解

    1. default和static关键字 a.default 用在接口中, 为该接口的实现类的方法.  --> 不能通过接口直接调用. static 也是用在接口中, 同Class中的static方法一样, 是类级别的方法, 而不是对象的方法.  --> 可以通过接口直接调用. b.一个接口可以有多个default方法, 也可以有多个static方法. 2. default 在使用中的注意事项 如下面的例子 有两个接口, InterA和InterB, 都有一个方法, 为defaultFunct

随机推荐