Module with multiple Blocks in multiple files
* Method 1 - all blocks in separate file *

You can implement hook_hook_info() in your .modules file like this:

function hook_hook_info()
{
  $hooks['block_info']['group'] = 'block';
  $hooks['block_view']['group'] = 'block';

  return $hooks;
}


This tells the system that when hook_block_info() and/or hook_block_view() are invoked, any [MODULE].block.inc files should be loaded. So you can then put these two hooks into [MODULE].block.inc, keeping your block code in a separate file altogether.

* Method 2 - different file for each block *

You can add module_load_include() to include files for each block. To do this, in hook_block_view() you can do the following:

function hook_block_view($delta = '')
{
  if($delta == 'block1')
  {
    module_load_include('inc', 'MODULENAME', 'MODULENAME.block1');
  }
  elseif($delta == 'block2')
  {
    module_load_include('inc', 'MODULENAME', 'MODULENAME.block2');
  }
}


With this code, you can now put block1 in MODULENAME.block1.inc and block2 in MODULENAME.block2.inc. Note that MODULNAME should be the actual name of your module, though technically the module name isn't required, it's just a good practice.